使用JOIN时WHERE子句vs ON

假设我具有以下T-SQL代码:


SELECT * FROM Foo f

INNER JOIN Bar b ON b.BarId = f.BarId;

WHERE b.IsApproved = 1;

以下代码也返回相同的行集:


SELECT * FROM Foo f

INNER JOIN Bar b ON (b.IsApproved = 1) AND (b.BarId = f.BarId);

这可能不是最好的示例,但是两者之间在性能上有什么不同吗?


森林海
浏览 627回答 3
3回答

慕森卡

不,查询优化器足够聪明,可以为两个示例选择相同的执行计划。您可以SHOWPLAN用来检查执行计划。但是,您应该将所有联接连接放在该ON子句上,并将所有限制放在该WHERE子句上。

慕雪6442864

SELECT * FROM Foo fINNER JOIN Bar b ON b.BarId = f.BarIdWHERE b.IsApproved = 1;这是更好的选择。它易于阅读和修改。在商业世界中,这就是您想要的。就性能而言,它们是相同的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server