这个问题出现时,我得到不同的logging计数为我认为是相同的查询一个使用not in where约束和另一个left join 。 not in约束中的表有一个空值(坏数据),导致查询返回0logging的计数。 我有点理解为什么,但我可以用一些帮助完全理解这个概念。 为了简单说明,为什么查询A返回一个结果,但是B不是? A: select 'true' where 3 in (1, 2, 3, null) B: select 'true' where 3 not in (1, 2, null) 这是在SQL Server 2005上。我还发现, set ansi_nulls off会导致B返回一个结果。
哪些查询更快? 不存在: SELECT ProductID, ProductName FROM Northwind..Products p WHERE NOT EXISTS ( SELECT 1 FROM Northwind..[Order Details] od WHERE p.ProductId = od.ProductId) 或者不在: SELECT ProductID, ProductName FROM Northwind..Products p WHERE p.ProductID NOT IN ( SELECT ProductID FROM Northwind..[Order Details]) 查询执行计划说,他们都做同样的事情。 如果是这样,那么推荐的forms是什么? 这是基于NorthWind数据库。 [编辑] 刚刚发现这个有用的文章: http : //weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx 我想我会坚持不存在。