SQL es nulo y = nulo [duplicado]
Posible duplicado:
¿qué es “=null” y “IS NULL”?
¿Existe alguna diferencia entre IS NULL y =NULL?
Cuál es la diferencia entre
where x is null
y
where x = null
¿Y por qué este último no funciona?
En SQL, una comparación entre un null
valor y cualquier otro valor (incluido otro null
) utilizando un operador de comparación (por ejemplo =
,,, etc.) dará como resultado un , que se considera a los efectos de una cláusula !=
donde (estrictamente hablando, "no es verdadero", en lugar de "falso", pero el efecto es el mismo).<
null
false
El razonamiento es que a null
significa "desconocido", por lo que el resultado de cualquier comparación con a null
también es "desconocido". Por lo tanto, no obtendrá resultados en las filas mediante la codificación where my_column = null
.
SQL proporciona una sintaxis especial para probar si una columna es null
, vía is null
y is not null
, que es una condición especial para probar si hay null
(o no null
).
Aquí hay algo de SQL que muestra una variedad de condiciones y su efecto según lo indicado anteriormente.
create table t (x int, y int);
insert into t values (null, null), (null, 1), (1, 1);
select 'x = null' as test , x, y from t where x = null
union all
select 'x != null', x, y from t where x != null
union all
select 'not (x = null)', x, y from t where not (x = null)
union all
select 'x = y', x, y from t where x = y
union all
select 'not (x = y)', x, y from t where not (x = y);
devuelve sólo 1 fila (como se esperaba):
TEST X Y
x = y 1 1
Vea esto ejecutándose en SQLFiddle
Es importante tener en cuenta que NULL no es igual a NULL .
NULL
no es un valor y, por lo tanto, no se puede comparar con otro valor.
where x is null
comprueba si x es un valor nulo.
where x = null
está comprobando si x es igual a NULL, lo que nunca será cierto
Primero, es la forma correcta de verificar si el valor de un campo es, null
mientras que luego no funcionará de la manera esperada porque null
es un valor especial que no equivale a nada, por lo que no puede usar la comparación de igualdad =
para ello.
Entonces, cuando necesite verificar si el valor de un campo es null
o no, use:
where x is null
en lugar de:
where x = null
Creo que la igualdad es algo que se puede determinar absolutamente. El problema null
es que es inherentemente desconocido. Null
combinado con cualquier otro valor es null
desconocido. Preguntar a SQL "¿Mi valor es igual a null
?" sería desconocido cada vez, incluso si la entrada es null
. Creo que la implementación de IS NULL
lo deja claro.