No es igual <>! = operador en NULL

Resuelto Maxim Gershkovich asked hace 13 años • 10 respuestas

¿Alguien podría explicar el siguiente comportamiento en SQL?

SELECT * FROM MyTable WHERE MyColumn != NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn <> NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn IS NOT NULL (568 Results)
Maxim Gershkovich avatar Apr 14 '11 11:04 Maxim Gershkovich
Aceptado

<>es el estándar SQL-92; !=es su equivalente. Ambos evalúan los valores, lo cual NULLno NULLes un marcador de posición para decir que falta un valor.

Es por eso que sólo puedes usar IS NULL/ IS NOT NULLcomo predicados para tales situaciones.

Este comportamiento no es específico de SQL Server. Todos los dialectos SQL que cumplen con los estándares funcionan de la misma manera.

Nota : Para comparar si su valor no es nulo , use IS NOT NULL, mientras que para comparar con un valor no nulo , use <> 'YOUR_VALUE'. No puedo decir si mi valor es igual o no a NULL, pero puedo decir si mi valor es NULL o NOT NULL. Puedo comparar si mi valor es distinto de NULL.

OMG Ponies avatar Apr 14 '2011 04:04 OMG Ponies

NULL no tiene valor y, por lo tanto, no se puede comparar utilizando operadores de valor escalar.

En otras palabras, ningún valor puede ser igual (o diferente) a NULL porque NULL no tiene valor.

Por lo tanto, SQL tiene predicados especiales IS NULL y IS NOT NULL para tratar con NULL.

Barry Brown avatar Apr 14 '2011 04:04 Barry Brown

Tenga en cuenta que este comportamiento es el comportamiento predeterminado (ANSI).

Si usted:

 SET ANSI_NULLS OFF

http://msdn.microsoft.com/en-us/library/ms188048.aspx

Obtendrás resultados diferentes.

SET ANSI_NULLS OFFaparentemente desaparecerá en el futuro...

Cade Roux avatar Apr 14 '2011 04:04 Cade Roux

Usamos

SELECT * FROM MyTable WHERE ISNULL(MyColumn, ' ') = ' ';

para devolver todas las filas donde MyColumn es NULL o todas las filas donde MyColumn es una cadena vacía. Para muchos "usuarios finales", el problema de las cadenas NULL y vacías es una distinción sin necesidad ni punto de confusión.

Jeff Mergler avatar Jun 07 '2017 23:06 Jeff Mergler

En SQL, cualquier cosa que evalúes/calcules con NULLresultados en DESCONOCIDO

Por eso SELECT * FROM MyTable WHERE MyColumn != NULLo SELECT * FROM MyTable WHERE MyColumn <> NULLte da 0 resultados.

Para proporcionar una verificación de NULLvalores, se proporciona la función isNull.

Además, puede utilizar el ISoperador como utilizó en la tercera consulta.

Mahendra Liya avatar Apr 14 '2011 04:04 Mahendra Liya