¿Cuál es la diferencia entre "= null" y "IS NULL"? ¿Cómo se usan de manera diferente?what is "= null" and "IS NULL"
Respuesta
= NULL
se utiliza para la asignación a un valor NULO, mientras que IS NULL
se utiliza para determinar si una variable tiene valor NULL.
Ejemplo de sssignment a NULL:
Update TableName Set ColumnName = NULL
Ejemplo de comparación con un valor NULL en una cláusula condicional (link):
Select * From TableName Where ColumnName is NULL
ColumnName IS NOT Null
también se puede utilizar para asegurarse de que un valor es no NULL
En una cláusula WHERE
, column=null
nunca habrá verdadera, no es válido utilizar null este modo, lo que necesita decir column IS NULL
o column IS NOT NULL
. Esto habla de la naturaleza especial de NULL
, no es un valor para comprobar la igualdad de, es un valor desconocido, por lo que debe utilizar la sintaxis IS
o IS NOT
.
Puede asignar algo el valor NULL
usando =
igual. Por ejemplo: UPDATE TableX SET Column=NULL...
enlaces:
Wikipedia NUll (SQL)
w3schools SQL NULL Values
SQL Tutorial, see IS NULL Operator section
“= NULL” es una expresión de valor Ahora “es NULL” es el método preferido para evaluar la condición de una variable siendo NULL
Una discusión más detallada sobre la misma cuestión se puede encontrar en el siguiente enlace
http://www.sqlservercentral.com/articles/T-SQL/understandingthedifferencebetweenisnull/871/
No estoy seguro si se puede leer el artículo sin iniciar sesión en el sitio para publicar la copia de la misma aquí
Comprender la diferencia entre "IS NULL" y "= NULL"
Cuando se crea una variable en SQL con la instrucción declare, se crea sin datos y se almacena en tabla de variables (vtable) dentro del espacio de memoria de SQL. El vtable contiene el nombre y la dirección de memoria de la variable. Sin embargo, cuando se crea la variable, no se asigna ninguna dirección de memoria a la variable y, por lo tanto, la variable no se define en términos de memoria.
Cuando establece la variable, se asigna una dirección de memoria y los datos iniciales se almacenan en esa dirección. Cuando vuelve a establecer el valor, los datos en la dirección de memoria apuntada por la variable se cambian al nuevo valor.
Ahora la diferencia y por qué cada uno se comporta de la manera que lo hace.
“= NULL”
“= NULL” es una expresión de valor.Es decir, si la variable se ha configurado y la memoria creada para el almacenamiento de datos tiene un valor. De hecho, una variable puede establecerse en NULL, lo que significa que el valor de los datos de los objetos es desconocido. Si el valor se ha establecido de este modo:
DECLARE @val CHAR(4)
SET @val = NULL
Ha configurado explícitamente el valor de los datos a lo desconocido y por lo que cuando lo hace:
If @val = NULL
Se evaluará como una verdadera expresión.
Pero si lo hago:
DECLARE @val CHAR(4)
If @val = NULL
Se evaluará a falso.
La razón para esto es el hecho de que estoy buscando NULL como el valor de @val. Como no he configurado el valor de @val, no se ha asignado ninguna dirección de memoria y, por lo tanto, no existe ningún valor para @val.
Nota: Consulte la sección sobre CONFIGURAR ANSI_NULLS (ON | OFF) debido a las diferencias en los valores predeterminados de SQL 7 y 2000 que hacen que los ejemplos no funcionen. Esto se basa en SQL 7.
“IS NULL”
Ahora “es NULO” es un poco más complicado y es el método preferido para evaluar la condición de un ser NULL variable. Cuando usa la cláusula "IS NULL", comprueba que la dirección de la variable y los datos dentro de la variable son desconocidos. Así que si, por ejemplo, lo hago:
DECLARE @val CHAR(4)
If @val IS NULL
PRINT ‘TRUE’
ELSE
PRINT ‘FALSE’
SET @val = NULL
If @val IS NULL
PRINT ‘TRUE’
ELSE
PRINT ‘FALSE’
Ambas salidas serán VERDADERAS. La razón está en el primer @val IS NULL. Solo he declarado la variable y no se ha establecido ningún espacio de direcciones para los datos, por lo que se comprueba "IS NULL". Y en el segundo, el valor se ha establecido explícitamente en NULL, que también es "IS NULL".
ANSI_NULLS (ON | OFF)
Ahora voy a tirar una torcedura en las obras. En los ejemplos anteriores, ve que = NULL funcionará siempre que el valor esté explícitamente establecido. Sin embargo, cuando SET ANSI_NULLS ON se comportará un poco diferente.
Ej.
DECLARE @val CHAR(4)
SET @val = NULL
SET ANSI_NULLS ON
If @val =NULL
PRINT ‘TRUE’
ELSE
PRINT ‘FALSE’
SET ANSI_NULLS OFF
If @val =NULL
PRINT ‘TRUE’
ELSE
PRINT ‘FALSE’
Usted notará la primera vez que se ejecuta la declaración = NULL después de hacer ANSI_NULLS EN se obtiene una FALSO y después de poner en OFF se obtiene una TRUE. La razon es la siguiente.
Extracto del artículo de SQL BOL “SET ANSI_NULLS”
El estándar SQL-92 requiere que un signo igual (=) o no igual a (<>) la comparación con un valor nulo se evalúa como FALSO. Cuando SET ANSI_NULLS está activado, una instrucción SELECT con WHERE column_name = NULL devuelve cero filas, incluso si hay valores nulos en column_name. Una instrucción SELECT utilizando WHERE column_name <> NULL devuelve cero filas incluso si hay valores no nulos en column_name.
Cuando SET ANSI_NULLS está desactivado, los operadores de comparación Igual (=) y No igual a (<>) no siguen el estándar SQL-92. Una instrucción SELECT utilizando WHERE column_name = NULL devuelve las filas con valores nulos en column_name.Una instrucción SELECT utilizando WHERE column_name <> NULL devuelve las filas con valores no nulos en la columna. Además, una instrucción SELECT utilizando WHERE column_name <> XYZ_value devuelve todas las filas que no son valores XYZ y que no son NULL.
Fin Extracto
Así como se define por SQL92, “= NULL” debe siempre evaluar falsa. Así que incluso establecer el valor explícitamente significa que nunca cumplirás con la condición = NULL si y tu código puede no funcionar como se esperaba. La razón más importante por la cual = NULL le disparará en el pie es esto, SQL 7 cuando se envía e instala se predetermina a ANSI_NULL OFF pero SQL 2000 está predeterminado a ANSI_NULL ON. Por supuesto, puede modificar esto de varias maneras, pero si actualizó una base de datos de 7 a 2000 y encontró que = NULL funcionó solo cuando lo configuró de forma explícita cuando despliega un servidor 2000 predeterminado, su código se rompe y puede causar problemas de datos.
Sin embargo, otra razón para utilizar IS NULL es que bajo las pautas de SQL 92 todavía se evaluará como VERDADERO y, por lo tanto, su código es más seguro para actualizar el servidor.
Resumen
Si Resumen menos que necesite para comprobar que el valor de una variable se fija igual a NULL y usted ha establecido ANSI_NULLS ON, a continuación, utilizar siempre la cláusula “IS NULL” para validar si una variable es nulo. Al utilizar = NULL en su lugar, puede causar muchos dolores de cabeza al tratar de solucionar los problemas que puedan surgir de ella, ahora o inesperadamente en el futuro.
Bases
Parte de la información proporcionada proviene de la forma en C++ funciona y cómo se comporta SQL en cada circunstancia. Desafortunadamente, SQL, hasta donde yo sé, no tiene una dirección de función que me permita dar salida a la dirección de memoria real para mostrar lo que ocurre debajo del capó. En C++ cuando se crea una variable, la variable tiene una dirección de 0xddddddd (en depuración, pero también puede tratarse de direcciones diferentes). Cuando configure la variable la primera vez que verifique la dirección, obtendrá una dirección de memoria válida donde se almacenan los datos. Además, se puede obtener más información de SQL Books Online en las secciones sobre IS NULL y SET ANSI_NULLS ....
muchas gracias por su respuesta completa! – user329820
¿Podría explicar más sobre la NOTA que se escribió anteriormente después de la parte "= null"? – user329820
- 1. this.domNode is null
- 2. ¿Hay alguna diferencia entre IS NULL y = NULL
- 3. "is not null" vs boolean MySQL - Rendimiento
- 4. ActiveRecord IS NOT NULL buscador sql
- 5. "IS NULL" en Zend_Db_Table select not working
- 6. Compruebe un registro IS NOT NULL en plsql
- 7. C# DateTime - ¿Cómo verificar que Time part is NULL?
- 8. "WHERE column IS NOT NULL" con Kohana v3 Query Builder
- 9. Cómo utilizar IS NULL en una consulta parametrizada (Delphi)
- 10. ExtJS FormPanel en un FormPanel falla con "this.body is null"
- 11. ¿Qué causa jQuery "$ (...) is null" en algunas páginas?
- 12. Active Record has_many genera sql con clave foránea IS NULL
- 13. Diferencias entre "IS NULL" e "ISNULL()" en Mysql
- 14. Mercurial commit messages and log, what encoding is supported, does hg care?
- 15. nhibernate Restrictions.Eq and null
- 16. COALESCE vs IS NOT NULL rendimiento en la comprobación de cadena vacía
- 17. MySQL "IS IN" equivalente?
- 18. Cómo agrego la condición "IS NOT NULL" a una búsqueda de Thinking Sphinx
- 19. ¿Cómo inicializo FirstChild para no obtener "x.firstChild is null or not an object"?
- 20. ¿Rails scope para IS NOT NULL y no está vacío/en blanco?
- 21. Ruby on Rails, before_filter y prepend_before_filter order is is?
- 22. SQL es nulo e = null
- 23. SKPaymentTransaction.originalTransaction.transactionReceipt is nil
- 24. JPA Merge Is Causing Duplicates
- 25. LINQ to Entities and null strings
- 26. #define NULL NULL
- 27. Objective-C - Is !! BOOL Beneficial
- 28. Python: diferencia entre `is` y` == `?
- 29. UIApplication sharedApplication - keyWindow is nil?
- 30. Is String s = "foobar" atomic?
¿Respuesta duplicada? –
No "will", pero "should". (Desafortunadamente.) Como muestra ese gigantesco c-n-p de algún otro sitio, al menos un sistema SQL lo dejó funcionar (principalmente). –
Solo para ser técnicamente correcto nulo es la ausencia de un valor, no un valor desconocido. –