【问题标题】:Is there any difference between IS NULL and =NULLIS NULL 和 =NULL 有什么区别吗
【发布时间】:2011-04-16 04:31:21
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

原因在这里描述:Why does NULL = NULL evaluate to false in SQL server

【讨论】:

  • 不是false。它是unknown。如果它是假的,那么NOT(X = NULL) 将是true。不是这种情况。 SQL 使用 3 值逻辑。
  • @Martin Smith 我知道三态逻辑。但WHERE 子句将unknown 视为false 并从结果集中删除。
【解决方案2】:

要添加到现有答案,这取决于您在使用“= 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'

【讨论】:

    【解决方案3】:

    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 中。”尽管已经提出了各种解决这些问题的建议 问题,替代方案的复杂性阻碍了他们 广泛采用。

    【讨论】:

    • 请不要发布仅链接的答案。在此处包含链接中的相关信息,以便如果目标站点消失,您的答案仍然有用。 (作为评论更好。)
    猜你喜欢
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    相关资源
    最近更新 更多