1
Amy 原创整理|资料核验:2026-10-30
PostgreSQL 文档说明:当左侧值不是 NULL、右侧没有相等值但至少有一项为 NULL 时,NOT IN 的结果会是 NULL,而不是 true。这来自 SQL 对未知值的逻辑规则。
教学示例:核对订单是否属于某个排除名单时,如果名单字段夹杂 NULL,结果可能与“排除这些已知编号”的直觉不同。
Amy 建议:先写清空值在业务中代表什么,再检查子查询返回内容。若改用 NOT EXISTS,应根据实际关联条件和空值语义设计,而不是机械替换关键词。
验证查询时加入“名单为空、名单含 NULL、左侧为 NULL、存在相等编号”四类小样本,比只试正常编号更容易看出边界。
官方来源:
https://www.postgresql.org/docs/current/functions-subquery.html