Sql 这些问题是相同的吗?

Sql 这些问题是相同的吗?,sql,sql-server,reporting-services,where,Sql,Sql Server,Reporting Services,Where,从foo中选择a,b与从foo中选择a,b,其中a=a和b=b相同吗 当我运行它们时,会得到不同的结果 最后,我试图为我的SSRS报告设置以下参数: SET@a Varchar(20) DECLEARE@a=Null 设置@b Varchar(20) DECLEARE@b=Null 选择a、b 来自富 哪里 a=isnull(@a,a) 并且b=isnull(@b,b)您会得到不同的结果,因为在a或b中的某个地方存在NULL。NULL在SQL Server中不等于NULL 用这个代替 SELEC

从foo中选择a,b
从foo中选择a,b,其中a=a和b=b
相同吗

当我运行它们时,会得到不同的结果

最后,我试图为我的SSRS报告设置以下参数:

SET@a Varchar(20)
DECLEARE@a=Null
设置@b Varchar(20)
DECLEARE@b=Null
选择a、b
来自富
哪里
a=isnull(@a,a)

并且b=isnull(@b,b)

您会得到不同的结果,因为在a或b中的某个地方存在NULL。NULL在SQL Server中不等于NULL

用这个代替

SELECT a, b FROM foo
WHERE (@a ISNULL or a =@a) AND (@b ISNULL or b=@b)

此外,您还需要在设置变量之前声明它们

基于a或b中的空值,这两个查询将不会返回相同的结果集


因为NULL不等于NULL

这并不总是正确的。OP说他得到了不同的结果。你的答案是正确的。我没有注意到null不等于null。记住SQL Server是件好事。这在计数(*)与计数([列])中很重要,因为well@H.Ben我添加了如何处理空参数