首页 > 解决方案 > TSQL——on 子句的顺序是否重要

问题描述

对于简化查询:

Select t1.c1, t1.c2, t2.d1
FROM table1 t1
LEFT JOIN table2 t2
ON
(t1.c1 = t2.d2)

从对称属性的数学看来,这与将ON反转为:

Select t1.c1, t1.c2, t2.d1
FROM table1 t1
LEFT JOIN table2 t2
ON
(t2.d2 = t1.c1)

这在 TSQL 中是否总是正确的,或者是否存在一些异常,如果查询被巧妙地更改,则可以获得更多行,如上所述?

我了解到非常细微的连接更改(在比这个简单示例复杂得多的查询中)会极大地影响行数。

此外,除了返回的行(我认为这两个查询始终应该完全相同)之外,我认为“ON”子句的一种排序可以使查询具有更好的性能速度。有人可以验证吗?

标签: tsqlmathleft-joinquery-optimizationsymmetric

解决方案


正如您所观察到的,任何类型的 JOIN 中的 ON 条件都可以是可交换的。你可以做ON a = bON b = a让它们的意思完全相同。它们只是布尔表达式。


推荐阅读