こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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
と書くのとで結果に違いはあるのでしょうか?
違いが見つけられずに困っています。
違っていない場合、どちらが一般的でしょうか?

どうぞよろしくお願い致します。

投稿日時 - 2010-03-06 18:08:37

QNo.5730104

暇なときに回答ください

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

inner joinであれば、どちらも違いはありません。
outer joinであれば、まったく違うものになります。

outer joinの場合、on句の結合条件で偽となる行も、nullとして結果が返されます。また、where句の抽出条件で偽となる行は、最終的な結果としては返されません。

投稿日時 - 2010-03-07 18:24:21

お礼

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

投稿日時 - 2010-03-13 18:01:58

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

少なくともSQL Serverに関しては実行上の差異はありません。
処理上の結果が同じと判断されるので、結局どちらもインデックスを使うように、オプティマイザが書き換えて実行します。

ON/WHEREに分けて書くのは結合条件と抽出条件を分けて書いて、処理をわかりやすくするのが目的です。
私は前者の書き方(全部ON句)をしますが、正直今回の場合はどっちでもいいような。。

投稿日時 - 2010-03-06 20:07:18

お礼

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

投稿日時 - 2010-03-13 18:03:10