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

sat*_*tya 42 sql sql-server sql-server-2005

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

And*_*rey 40

= NULL总是unknown(这是3状态逻辑),但WHERE子句将其视为false结果集并从结果集中删除.所以NULL你应该使用IS NULL

这里描述了原因:为什么NULL = NULL在SQL Server中评估为false

  • 这不是'假'.这是'未知'.如果它是假的那么`NOT(X = NULL)`将是'true`.不是这种情况.SQL使用3值逻辑. (5认同)
  • @Martin Smith 我了解三态逻辑。但是“WHERE”子句将“unknown”视为“false”并从结果集中删除。 (2认同)

Ada*_*Dev 11

要添加到现有答案,取决于使用"= 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'
Run Code Online (Sandbox Code Playgroud)


Mar*_*and 5

IS NULL和之间存在差异,= NULL这是因为 SQL 的三值逻辑:

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

相关段落摘录:

挑战

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

  • 请不要发布仅链接的答案。包括此处链接中的相关信息,这样即使目标网站消失,您的答案仍然有用。(作为评论更好。) (2认同)