SET ANSI_NULL 为 ON 但仍返回 NULL 行

SET ANSI_NULL is ON but NULL rows are still being returned

我有以下 table,SET ANSI_NULL 设置为 ON

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[tblStandard5columnCustomerDetails]
(
    [Id] [int] NOT NULL,
    [FName] [varchar](60) NULL,
    [Address] [varchar](50) NULL,
    [PhoneNumber] [varchar](11) NULL,
    [LName] [varchar](60) NULL
) ON [PRIMARY]

GO

并插入如下一条记录:

Insert Into [dbo].[tblStandard5columnCustomerDetails] 
VALUES
(
1,
NULL,
NULL,
NULL,
NULL
);

根据 Microsoft 文章,当使用 Select 语句和 WHERE column_name = NULL

时,我不应该返回任何行

When SET ANSI_NULLS is ON, a SELECT statement that uses WHERE column_name = NULL returns zero rows even if there are null values in column_name. A SELECT statement that uses WHERE column_name <> NULL returns zero rows even if there are nonnull values in column_name.

但是什么时候执行这个查询

select FNAME From [dbo].[tblStandard5columnCustomerDetails] WHERE FName IS NULL

我返回值为 NULL 的一行

为什么?

你基本上回答了你自己的问题。

与"SET ANSI_NULLS ON":

  • 如果其中一个操作数为空,"relational operators" +, <, >, <=, >= 将永远不会计算为 "true" 或 "false"。

  • IS NULL,另一方面,总是计算为"true"(如果为空),或"false"(如果不为空)。

查看此处了解更多详情: