连接条件中的SQL筛选条件或更高效的where子句

Gra*_*tzy 27 sql sql-server join where-clause

我有一个相对简单的查询连接两个表."Where"标准可以在连接标准中表示,也可以表示为where子句.我想知道哪个更有效率.

查询是从一开始就查找推销员的最大销售额.

情况1

select salesman.salesmanid, max(sales.quantity)
from salesman
inner join sales  on salesman.salesmanid =sales.salesmanid 
                  and sales.salesdate < salesman.promotiondate
group by salesman.salesmanid 
Run Code Online (Sandbox Code Playgroud)

案例2

select salesman.salesmanid, max(sales.quantity)
from salesman
inner join sales  on salesman.salesmanid =sales.salesmanid 
where sales.salesdate < salesman.promotiondate
group by salesman.salesmanid 
Run Code Online (Sandbox Code Playgroud)

注意案例1完全没有where子句

RDBMS是Sql Server 2005

编辑 如果第二部分连接条件或where子句是sales.salesdate <某个固定日期,那么它实际上没有任何加入这两个表的条​​件会改变答案.

mar*_*c_s 28

我不会在这里使用性能作为决定因素 - 老实说,我认为这两种情况之间没有任何可衡量的性能差异.

我会一直使用案例#2 - 为什么?因为在我看来,您应该只将在两个表之间建立JOIN的实际条件放入JOIN子句中 - 其他所有内容都属于WHERE子句.

IMO,只是保持事情清洁,把事情放在他们所属的地方.

显然,有些情况下使用LEFT OUTER JOIN,标准的放置确实会对返回的结果产生影响 - 当然,这些情况会从我的建议中排除.