我很惊讶地看到IS NULL和= NULL在select查询中产生不同的结果。他们之间有什么区别?什么时候用。如果你能详细解释我,我会很高兴的。
答案 0 :(得分:40)
= NULL
始终为unknown
(这是3状态逻辑),但WHERE
子句将其视为false
并从结果集中删除。因此,对于NULL
,您应该使用IS NULL
答案 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中。“尽管已经提出了各种解决方案 问题,替代品的复杂性阻止了他们的 广泛采用。