SQL es nulo y = nulo [duplicado]

Resuelto Sachin Kainth asked hace 12 años • 4 respuestas

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?

Sachin Kainth avatar Mar 06 '12 17:03 Sachin Kainth
Aceptado

En SQL, una comparación entre un nullvalor 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).<nullfalse

El razonamiento es que a nullsignifica "desconocido", por lo que el resultado de cualquier comparación con a nulltambié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 nully 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

Bohemian avatar Mar 06 '2012 10:03 Bohemian

Es importante tener en cuenta que NULL no es igual a NULL .

NULLno es un valor y, por lo tanto, no se puede comparar con otro valor.

where x is nullcomprueba si x es un valor nulo.

where x = nullestá comprobando si x es igual a NULL, lo que nunca será cierto

Curtis avatar Mar 06 '2012 10:03 Curtis

Primero, es la forma correcta de verificar si el valor de un campo es, nullmientras que luego no funcionará de la manera esperada porque nulles 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 nullo no, use:

where x is null

en lugar de:

where x = null
Sarfraz avatar Mar 06 '2012 10:03 Sarfraz

Creo que la igualdad es algo que se puede determinar absolutamente. El problema nulles que es inherentemente desconocido. Nullcombinado con cualquier otro valor es nulldesconocido. 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 NULLlo deja claro.

Vikram avatar Mar 06 '2012 10:03 Vikram