アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

A 回答 (2件)

inner joinであれば、どちらも違いはありません。


outer joinであれば、まったく違うものになります。

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

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

お礼日時:2010/03/13 18:01

少なくともSQL Serverに関しては実行上の差異はありません。


処理上の結果が同じと判断されるので、結局どちらもインデックスを使うように、オプティマイザが書き換えて実行します。

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

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

お礼日時:2010/03/13 18:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!