2010-09-23 22 views
35

? Estoy sorprendido de ver que IS NULL y = NULL están arrojando resultados diferentes en una consulta de selección. ¿Cuál es la diferencia entre ellos? Cuándo usar qué. Me gustaría que me expliques en detalle.¿Hay alguna diferencia entre IS NULL y = NULL

+2

Consulte el [artículo de la wikipedia] (http://en.wikipedia.org/wiki/Null_%28SQL%29) para obtener información adicional. –

+0

Este es un duplicado de una serie de preguntas: http://stackoverflow.com/questions/1843451/why-does-null-null-evaluate-to-false-in-sql-server – Paddy

Respuesta

37

= NULL siempre es unknown (esta es una pieza de 3 lógica estado), pero WHERE cláusula lo trata como false y gotas del conjunto de resultados. Así que para NULL se debe utilizar se describen aquí IS NULL

Razones: Why does NULL = NULL evaluate to false in SQL server

+5

No es 'falso'. Es 'desconocido'. Si fuera falso, 'NOT (X = NULL)' sería 'true'. Este no es el caso. SQL usa 3 valores de lógica. –

+1

@Martin Smith conozco la lógica de 3 estados. pero la cláusula 'WHERE' trata' unknown' como 'false' y lo deja caer del conjunto de resultados. – Andrey

10

Para añadir a las respuestas existentes, que depende de si tiene o no en ANSI_NULLS, cuando se utiliza "= NULL".

-- This will print TRUE 
SET ANSI_NULLS OFF; 
IF NULL = NULL 
    PRINT 'TRUE' 
ELSE 
    PRINT 'FALSE' 

-- This will print FALSE 
SET ANSI_NULLS ON; 
IF NULL = NULL 
    PRINT 'TRUE' 
ELSE 
    PRINT 'FALSE' 
2

debido a la tres-lógica valioso de SQL:

http://en.wikipedia.org/wiki/Null_%28SQL%29#Three-valued_logic_.283VL.29

Extracto de un párrafo pertinente:

Desafíos

nulos ha sido la foco de controversia y una fuente de debate debido a su lógica asociada de tres valores (3VL), los requisitos especiales para su uso en combinaciones de SQL, y el manejo especial requerido por las funciones de agregado y los operadores de agrupación SQL. Computadora profesor de ciencias Ron van der Meyden resumió los diversos problemas como: "Las incoherencias en el estándar SQL significan que no es posible atribuir ninguna semántica lógica intuitiva al tratamiento de nulos en SQL." A pesar de que se han realizado varias propuestas para resolver estos problemas , la complejidad de las alternativas ha impedido su adopción generalizada .

+1

+1 por ser la única respuesta para mencionar esto. –

+1

No publique respuestas solo de enlace. Incluya la información relevante del enlace aquí, de modo que si el sitio objetivo desaparece, su respuesta aún será útil. (Esto es mejor como un comentario). – jpaugh

Cuestiones relacionadas