どちらも文字通り違います。
t2
最初のクエリは、テーブルの結合が行われる前にテーブルのフィルタリングを行います。したがって、結果はテーブルで結合され、t1
すべてのレコードがt1
リストに表示されます。
2 つ目は、テーブルの結合が完了した後の合計結果からフィルター処理されます。
これが例です
表1
ID Name
1 Stack
2 Over
3 Flow
表2
T1_ID Score
1 10
2 20
3 30
最初のクエリでは、次のようになります。
SELECT a.*, b.Score
FROM Table1 a
LEFT JOIN Table2 b
ON a.ID = b.T1_ID AND
b.Score >= 20
それが行うことは、テーブルを結合する前に、のレコードがtable2
最初にスコアによってフィルター処理されることです。したがって、table1 で結合される唯一のレコードは
T1_ID Score
2 20
3 30
Score
のは 10 しかないためT1_ID
です。クエリの結果は
ID Name Score
1 Stack NULL
2 Over 20
3 Flow 30
2番目のクエリは異なりますが。
SELECT a.*, b.Score
FROM Table1 a
LEFT JOIN Table2 b
ON a.ID = b.T1_ID
WHERE b.Score >= 20
他のテーブルに一致するレコードがあるかどうかに関係なく、最初にレコードを結合します。したがって、結果は次のようになります
ID Name Score
1 Stack 10
2 Over 20
3 Flow 30
そしてフィルタリングが行われb.Score >= 20
ます。したがって、最終結果は次のようになります
ID Name Score
2 Over 20
3 Flow 30