• ベストアンサー

JOINの時のONとWHEREの違いについて

二つのテーブルをjoinして比較したいときに 比較対象の項目がA,Bとあったとします。AはキーですがBはキーではありません。 このとき、ON句でTABLE1.A=TABLE2.A and TABLE1.B=TABLE2.B とかくのと ON句でTABLE1.A=TABLE2.A WHERE TABLE1.B=TABLE2.B と書くのとで結果に違いはあるのでしょうか? 違いが見つけられずに困っています。 違っていない場合、どちらが一般的でしょうか? どうぞよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

inner joinであれば、どちらも違いはありません。 outer joinであれば、まったく違うものになります。 outer joinの場合、on句の結合条件で偽となる行も、nullとして結果が返されます。また、where句の抽出条件で偽となる行は、最終的な結果としては返されません。

goouser20
質問者

お礼

ありがとうございます。 外部結合だと差がでてきますね。 気をつけます。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

少なくともSQL Serverに関しては実行上の差異はありません。 処理上の結果が同じと判断されるので、結局どちらもインデックスを使うように、オプティマイザが書き換えて実行します。 ON/WHEREに分けて書くのは結合条件と抽出条件を分けて書いて、処理をわかりやすくするのが目的です。 私は前者の書き方(全部ON句)をしますが、正直今回の場合はどっちでもいいような。。

goouser20
質問者

お礼

ありがとうございます。 内部結合ならどちらでもいいんですね。 ありがとうございました。すっきりしました。

すると、全ての回答が全文表示されます。

関連するQ&A