贝利信息

SQL 中 IS NULL 与 = NULL 的本质差异

日期:2026-01-20 00:00 / 作者:冰川箭仙
IS NULL 是标准且正确的空值判断方式,因为 NULL 不是值而是缺失标记,= NULL 永远返回 UNKNOWN,WHERE 中被过滤;IS NULL 和 IS NOT NULL 是专用于检测 NULL 语义的真值测试谓词。

在 SQL 中,IS NULL 是标准、正确的空值判断方式,而 = NULL 永远返回 UNKNOWN(在 WHERE 或 ON 条件中等效于 FALSE),查不到任何结果——这不是语法错误,而是由 SQL 三值逻辑(TRUE/FALSE/UNKNOWN)决定的本质行为。

NULL 不是值,而是一种“缺失标记”

SQL 中的 NULL 表示“未知”或“不适用”,它不等于任何东西,包括它自己。因此:

IS NULL 是专门设计的谓词,用于检测缺失状态

不同于比较运算符(=、!=、> 等),IS NULLIS NOT NULL 是 SQL 标准定义的**真值测试谓词**,直接作用于 NULL 的语义属性:

常见误用与实际影响

WHERE age = NULL 看似直觉,但实际等价于 WHERE UNKNOWN,整张表被跳过。例如:

扩展:如何安全地处理 NULL 比较

若需逻

辑上“把 NULL 当作相同值来对待”(如去重、连接),不能依赖 =,而应使用: