所以我知道在查询的WHERE子句中添加过滤器条件是一种很好的编程习惯,以便尽量减少在连接中返回的行数,但是当我们如何决定是否应该在WHERE而不是FROM中添加一个过滤器?例如:在WHERE中添加过滤器与FROM
SELECT a.ColA, a.ColB, a.ColC, b.ColD, b.ColE
FROM TblA a INNER JOIN TblB b
On a.ColA = b.ColD
AND a.ColA = 'X'
AND a.ColB = 'Y'
WHERE b.ColD = 'ABC'
在此查询,如果我说什么b.ColD的AND子句,而不是在哪里?这不会使查询更有效率吗?我知道这两种方法的结果可能有所不同,但我不知道为什么?
谢谢。
根据tsql标记判断,您使用的是SQL Server。管理工作室能够显示查询的执行计划,因此您可以比较两个版本的差异。虽然我的_guess_是没有太大的区别。 –
这不是一个重复:OP是询问过滤器,而不是JOINs – gbn
@gbn我不确定OP的措辞(“过滤器”与“条件”等)如此重要,因为OP给出的例子基本上与[here](http://stackoverflow.com/q/1907335/880904),[here](http://stackoverflow.com/q/1018952/880904),[here](http:/ /stackoverflow.com/q/1401889/880904),[这里](http://stackoverflow.com/q/15483808/880904)等等。所有这些都有'JOIN ... ON',询问'WHERE',并包括类似的答案给你。在我看来,这个问题已经得到解答,或者我们是否也应该重新开放[这个问题](http://stackoverflow.com/q/13145275/880904)? –