es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué no funciona la cláusula ‘WHERE NOT’ con filas nulas?

Tal vez me esté perdiendo algo. Dado que el problema es demasiado genérico para buscarlo en Google, ahora busco ayuda aquí. Probado en MySQL

Mi pregunta: ¿Por qué esta consulta SELECT no muestra [ id=2 ]?

SELECT `id` FROM `testtable1` WHERE NOT (`key_boolean` = 1);

Definición de tabla y datos de prueba:

CREATE TABLE IF NOT EXISTS testtable1 (
id int(11) NOT NULL AUTO_INCREMENT,
key_boolean tinyint NULL DEFAULT NULL,
PRIMARY KEY (id)
) AUTO_INCREMENT=1;

INSERT INTO testtable1 (key_boolean) VALUES (1);
INSERT INTO testtable1 () VALUES ();

En la tabla ahora se almacena:

id key_boolean
1 1
2 NULL

Edición:
Basándome en las respuestas, encontré algunas preguntas similares en StackOverflow. Esta publicación se ajusta bien para MySQL: enlace de StackOverflow

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual la declaración SELECT no muestra el id=2 se debe al hecho de que NULL no es igual a 1, por lo tanto, la cláusula WHERE evalúa verdadero para ambas filas en la tabla. Para incluir filas con valores NULL en los resultados de la consulta, la cláusula WHERE debe ser modificada a:

    SELECT `id` FROM `testtable1` WHERE (`key_boolean` != 1) OR (`key_boolean` IS NULL);
    

    Esto mostrará ambas filas en la tabla, incluyendo id=2. La condición adicional (key_booleanIS NULL) verifica explícitamente los valores NULL.

    Es importante tener en cuenta que el comportamiento de NULL en las consultas SQL puede ser complicado y a menudo requiere consideraciones especiales. En general, es una buena práctica manejar explícitamente los valores NULL en las cláusulas WHERE y otros comandos SQL.

Comments are closed.