You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中NOT为何无法匹配NULL?IsDuplicate字段查询疑问

问题原因解析

这是SQL的三值逻辑特性导致的问题。SQL里处理NULL时,所有和NULL的比较操作(比如=、!=等)返回的结果既不是TRUE也不是FALSE,而是UNKNOWN(未知)。

当IsDuplicate的值为NULL时,IsDuplicate = '1'这个表达式的结果是UNKNOWN,对它取反NOT(UNKNOWN)得到的还是UNKNOWN。而WHERE子句只会筛选出判断结果为TRUE的行,UNKNOWN的行不会被选中,所以WHERE NOT(IsDuplicate = '1')就漏掉了值为NULL的记录,自然无法覆盖你想要的0和NULL的情况。

再看你提到的两种有效写法:

  • WHERE IsDuplicate = '0' OR IsDuplicate IS NULL:直接通过IsDuplicate IS NULL明确判断NULL,这是SQL里专门检测NULL的语法,结果是TRUE,所以能选中NULL的行;
  • WHERE ISNULL(IsDuplicate, 0) = 0:用ISNULL()函数把NULL转换成了0,这样比较的结果就是TRUE,也能正确选中目标行。

如果想让类似NOT(IsDuplicate = '1')的写法生效,可以改成:

WHERE NOT(IsDuplicate = '1') OR IsDuplicate IS NULL

或者用COALESCE函数统一处理NULL:

WHERE COALESCE(IsDuplicate, '0') != '1'

内容的提问来源于stack exchange,提问作者Aashishkebab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 23:54:54