Sql server SQL Server 2008和2014中处理空值的差异

Sql server SQL Server 2008和2014中处理空值的差异,sql-server,sql-server-2008,null,sql-server-2014,Sql Server,Sql Server 2008,Null,Sql Server 2014,例如,我有以下查询 Select * from TT where T_id not in (1,2,3) 在表TT中,我在列中有空值以及其他值,上述查询返回1,2,3中没有t_id的所有行,包括SQL 2008中有空值的行,但在2014年,查询排除了1,2,3和空值,并返回其余行 有人能解释一下2008年和2014年在处理空值方面的差异吗?您看了吗?我认为这是在谈论SQL Server 2014中使用而不是。您确定这两个不同的数据库实例对于ANSI_null没有不同的默认值吗?@shriop

例如,我有以下查询

 Select * from TT where T_id not in (1,2,3)
在表TT中,我在列中有空值以及其他值,上述查询返回1,2,3中没有t_id的所有行,包括SQL 2008中有空值的行,但在2014年,查询排除了1,2,3和空值,并返回其余行


有人能解释一下2008年和2014年在处理空值方面的差异吗?

您看了吗?我认为这是在谈论SQL Server 2014中使用
而不是
。您确定这两个不同的数据库实例对于ANSI_null没有不同的默认值吗?@shriop我运行了select databasepropertyex('dbname','IsAnsiNullsEnabled'),对于这两个版本,它都返回了
0
,在表级别如何?select使用sys.tables中的_ansi_nulls,*其中[name]=“TT”这不仅仅是关于服务器或数据库的默认选项-可以通过连接选项更改ansi_nulls。你甚至可以在你的应用程序中,在ssms中,在另一个app/ssms实例中使用不同的ANSU NULL值,这可能会导致相同sql代码的不同结果。你看了吗?我认为这是在谈论SQL Server 2014中使用
而不是
。您确定这两个不同的数据库实例对于ANSI_null没有不同的默认值吗?@shriop我运行了select databasepropertyex('dbname','IsAnsiNullsEnabled'),对于这两个版本,它都返回了
0
,在表级别如何?select使用sys.tables中的_ansi_nulls,*其中[name]=“TT”这不仅仅是关于服务器或数据库的默认选项-可以通过连接选项更改ansi_nulls。您甚至可以在您的应用程序中、在ssms中、在另一个app/ssms实例中使用不同的ANSU NULL值,这可能会导致相同sql代码的不同结果。