我没有得到任何我期望的结果和长篇故事我发现这种奇怪的行为:
select 1 where 'a' in ('a', 'b', null)
-> 1
select 1 where 'a' NOT in ('b', 'c', null)
-> empty resultset
我对SQL Server(来自MySQL)相对较新,但这对我来说似乎是一个错误,这是预期/期望的行为吗?我知道anything + null == null
范例,但如果这是解释,那么我希望第一个查询返回一个空结果集。
我也尝试过:
select 1 where NOT ('a' in ('b', 'c', null))
又是一个空的结果集,我现在很困惑......
我在原始查询中添加了where [mycolumn] is not null
,问题解决了,但我只是好奇。
修改
我从重复的标记中看到,这取决于ansi_nulls
的设置。如果 on ,null
将被视为unknown
。是的,我可以看到你不能肯定地说,在一个具有未知值的集合中没有任何值。
为什么要将null
视为unknown
?它们对我来说是非常不同的概念。
null
表示没有价值,比如询问[gum]
抽屉里的内阁没有[gum]
抽屉的人。
unknown
表示存在值,但由于某种原因,我们无法访问该值。也许[gum]
抽屉被锁定,它可能有内容,可能是空的,但它不是null
,而是unknown
。
我的想法在哪里?