SQL Server - 选择一行不会返回任何NULL值.为什么?

Saa*_*ail 3 sql-server null select conditional-statements

我有以下SQL表:

CREATE TABLE [dbo].[Test](
    [TestID] [int] NOT NULL,
    [TestNum] [int] NULL,
    [TestReason] [varchar](50) NULL
)
Run Code Online (Sandbox Code Playgroud)

所以TestNum是一个允许NULL值的INT,我在表中插入了大量的数据,其中一些行包含TestNumNULL

如果我然后运行以下查询

select *
from Test
where TestNum != 123
Run Code Online (Sandbox Code Playgroud)

查询aboe不返回任何具有NULL值的行.我希望它返回所有行除了那些值为123的行.

为什么是这样?

我在MS-SQL 2000数据库上运行此查询,导入到MS SQL 2005.这有什么影响吗?或者这是所有版本的MS SQL Server的行为标准?

Ano*_*246 12

NULL表示值"未知".因此,NULL = NULL为false.如果要查看NULL,还必须说"OR TestNum IS NULL".

  • +1.添加:这不是SQL Server这样做 - 这是标准的SQL三元语义,基本上在所有SQL Server上都是一样的.所以,没有人请责怪微软. (2认同)