IS NULL和= NULL之间有什么区别吗?

时间:2010-09-23 10:02:34

标签: sql sql-server sql-server-2005

我很惊讶地看到IS NULL和= NULL在select查询中产生不同的结果。他们之间有什么区别?什么时候用。如果你能详细解释我,我会很高兴的。

3 个答案:

答案 0 :(得分:40)

= NULL始终为unknown(这是3状态逻辑),但WHERE子句将其视为false并从结果集中删除。因此,对于NULL,您应该使用IS NULL

原因如下所述:Why does NULL = NULL evaluate to false in SQL server

答案 1 :(得分:10)

要添加到现有答案,取决于使用“= NULL”时是否启用了ANSI_NULLS。

-- 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 :(得分:2)

因为SQL的三值逻辑:

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

相关段落的摘录:

  

挑战

     

Null一直是争议焦点和焦点   由于其相关的三值逻辑(3VL),特殊的辩论   它在SQL连接中的使用要求,以及特殊处理   聚合函数和SQL分组运算符所需的。电脑   科学教授Ron van der Meyden将各种问题归纳为:   “SQL标准的不一致意味着它是不可能的   将任何直观的逻辑语义归结为空值的处理   在SQL中。“尽管已经提出了各种解决方案   问题,替代品的复杂性阻止了他们的   广泛采用。