No es igual <>! = operador en NULL
¿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)
<>
es el estándar SQL-92; !=
es su equivalente. Ambos evalúan los valores, lo cual NULL
no NULL
es un marcador de posición para decir que falta un valor.
Es por eso que sólo puedes usar IS NULL
/ IS NOT NULL
como 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.
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.
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 OFF
aparentemente desaparecerá en el futuro...
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.
En SQL, cualquier cosa que evalúes/calcules con NULL
resultados en DESCONOCIDO
Por eso SELECT * FROM MyTable WHERE MyColumn != NULL
o SELECT * FROM MyTable WHERE MyColumn <> NULL
te da 0 resultados.
Para proporcionar una verificación de NULL
valores, se proporciona la función isNull.
Además, puede utilizar el IS
operador como utilizó en la tercera consulta.