外部結合と WHERE の同居

左外部結合したうえで、右側の表の列を WHERE で絞った例です。ON と WHERE の適用タイミングの違いを、情報で確かめます。

入力

SQL

SELECT * FROM a LEFT JOIN b ON a.id = b.a_id WHERE b.x = 1

結果

エラー 0 件・警告 0 件・情報 1 件

指摘(エラー・警告・情報)

  • 情報 WHERE 句 外部結合(LEFT・RIGHT・FULL)があり、WHERE もあります。ON の条件は結合の前、WHERE の条件は結合の後に適用されるため、内部結合では同じでも外部結合では結果が変わります(7.2.1.1)。右側の表の列を WHERE で絞ると、NULL の行が消えて内部結合と同じ結果になることがあります。
表の数2 個
結合の数1 個
外部結合の数1 個

JOIN の対応表

JOIN の対応表
#結合の種類表(別名)条件の種類条件
1(最初の表)a--
2LEFT OUTER JOINbONa.id = b.a_id

検算(この結果になる理由)

ON の制限は結合の前、WHERE の制限は結合の後に処理されます。内部結合では差が出ませんが、外部結合では結果が変わります(7.2.1.1 節)。外部結合と WHERE が同居するため、その旨の情報が 1 件出ます。

判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。

このツールの制約

ご利用にあたって

  • 結果は字句の読み取りにもとづく確認で、実際のデータベースでの解釈を保証するものではありません。
  • ドキュメントは PostgreSQL License で公開されています。このサイトはその内容を要約して参照しており、転載はしていません。

ほかの入力例