为什么选择在varchar比较中消除NULL记录

GPG*_*GVM 3 sql t-sql sql-server

我有一张包含782,856条记录的表格.此表中有一列PEOPLE_TYPE是varchar(20).我不认为表模式很重要,但如果确实如此,我很乐意发布它.

它具有这些不同的值(parens是每种类型的计数):

NULL (782,101)
ANONYMOUS (1)
BOARD (530)
USER (224)
Run Code Online (Sandbox Code Playgroud)

那么为什么这个选择返回这些结果?

select * from people where PEOPLE_TYPE != 'BOARD'
Run Code Online (Sandbox Code Playgroud)

这返回225行... USER&ANONYMOUS ....为什么不包括我的空值...因为我现在已经执行了文本搜索并且无法真正比​​较NULL,所以它们被删除了?

感谢您对我的补救问题的耐心等待.

sim*_*rcl 7

NULL是一件奇怪的事情.与NULL的任何比较都是false:

NULL = NULL为false

NULL!=任何东西都是假的

NULL!= NULL也是false.

你必须说像column这样的东西是null,或者column不是null.

您的查询需要

select * from people where PEOPLE_TYPE != 'BOARD' or PEOPLE_TYPE is null
Run Code Online (Sandbox Code Playgroud)

  • SQL 中与 NULL 的比较既不是 true 也不是 false;结果未知。你一定喜欢三向布尔逻辑:) (2认同)