PostgreSQL中Unknown和Null是否等价?
结果产生的核心原因
- SQL标准定义了三值布尔逻辑,布尔类型的合法取值为
true、false、unknown三种,所有涉及NULL的比较运算(如示例中的NULL = 7),运算结果默认为unknown。 - PostgreSQL在实现时,将布尔类型的
unknown值和通用空值NULL做了等价处理,unknown就是布尔场景下的NULL表示,二者没有逻辑差异。 - 示例中当
col为NULL时,col = 7的运算结果为unknown,等价于NULL,因此(col = 7) IS NULL的返回结果为true,和你观测到的输出完全匹配。
注意事项
如果你的判断目标是字段本身是否为空,直接写col IS NULL即可,不要包裹额外的比较运算,避免混淆比较运算结果的空值和字段本身的空值。
内容的提问来源于stack exchange,提问作者Joe DiNottra
相关产品推荐
相关产品推荐

