这些查询是否相同?

Are these queries the same?

SELECT a,b FROM fooSELECT a,b FROM foo WHERE a=a and b=b一样吗?

当我 运行 他们时,我得到了不同的结果。

最终,我尝试将我的 SSRS 报告的参数设置为:

SET @a Varchar (20) DECLEARE @a = Null SET @b Varchar (20) DECLEARE @b = Null SELECT a,b FROM foo WHERE a=isnull(@a,a) and 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)

您还需要在设置变量之前先声明变量。

这两个查询都不会return基于在 a 或 b 中具有 NULL 值的相同结果集。

很简单,因为NULL不等于NULL。