为什么值永远不会在null中收集?

时间:2014-02-25 15:18:59

标签: sql sql-server

我没有得到任何我期望的结果和长篇故事我发现这种奇怪的行为:

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

我的想法在哪里?

0 个答案:

没有答案