条件是JOIN子句中的恶SQL

kir*_*off 4 mysql sql sql-server join

在JOIN子句或WHERE子句中使用SQL条件更好吗?是否针对这两种方式优化了SQL引擎?它取决于发动机吗?

是否始终可以通过WHERE子句中的条件替换JOIN子句中的条件?

这里举例说明我的意思

SELECT      role_.name
FROM        user_role
INNER JOIN  user ON user_role.user_id_ = user.id AND
                    user_role.user_id_ = @user_id
INNER JOIN  role ON user_role.role_id = role_.id
Run Code Online (Sandbox Code Playgroud)

SELECT      role_.name
FROM        user_role
INNER JOIN  user ON user_role.user_id_ = user.id
INNER JOIN  role ON user_role.role_id = role_.id
WHERE       user.id = @user_id
Run Code Online (Sandbox Code Playgroud)

Mud*_*san 7

如果使用INNER JOIN,JOIN子句和WHERE条件中的SQL条件是等效的.

否则,如果使用任何其他JOIN(如LEFT/RIGHT)而不是基于条件匹配行之后,则会发生另一个步骤,即添加OUTER ROWS,即非匹配行.

WHERE条件只是过滤掉所有不匹配的行.

看到这个帖子