結論を言うと、INNER JOIN
とJOIN
は一緒です。
INNER
は省略できるので、JOIN
と宣言されているのはINNER JOIN
と同じと思ってよいと思います。
省略はした方が良いのだろうか?
コード規約に沿って記載すべき、というのが結論ですが
こういうのを明示的に設定してない所もあるので、個人的な見解を記載します。
正直、手間をかけてもINNERは記述したほうが良いと思います。
メソッドのjoinと合わさると可読性落ちる
言語によっては、joinというメソッドがあると思います。
SQLの文字列結合をする際に、JOIN句とjoinが重なることがあると思います。
区切りとして、結合のJOIN句で改行するというのは結構あるので、以下のようなちょっと面白い現象が起きます。
sql.join("join JAGI jagi on ....")
上記はネタですが、思ったよりプログラムの標準メソッドと予約語などが混ざると読みにくくなります。
極力標準で存在する名前と被るような記述は、やめておきましょう。
JOINだけだと記述ミスなのか、想定挙動なのかパッと見分からない
JOINだけの記載があるとパッと見どちらなのか分からないことですね。
- 本当はLEFT JOINだけど、書き忘れちゃった♡
- INNER JOINを略しただけだよ♡
少なくとも、レビューや調査の際にいちいち確認する必要が出ます。
記述ミスではなく、INNER JOINを略しただけか?と。
そんなことをするくらいなら、INNERをちゃんと記述するほうが結果的に楽できると思います。
おまけ:JOIN句とカンマによる記述はどっちの方が見やすいか
カンマによる記述
カンマによる羅列というのは、こういうやつです。
select * from tableA, tableB
where tableA.key1 = tableB.key1
and tableA.key2 = tableB.key2
and tableA.column = 1
上記と下記は一緒の挙動をします。
JOIN句による記載
select * from tableA
inner join tableB
on tableA.key1 = tableB.key1
and tableA.key2 = tableB.key2
where tableA.column = 1
どちらの方が見やすいか?
どちらの方が見やすいかというと、圧倒的に後者です。
それはJOIN句をつけることで、下記が圧倒的に見やすくなります。
- テーブルが何を基準にしているか
- 外部結合か内部結合かがすぐわかる
- 結合のキーとなる項目(漏れがあるかもわかりやすい)
- 基準元テーブルを絞り込む抽出条件
今回は例として非常に簡単な文でしたが、これが3つ、4つのテーブル
WHERE句が複雑になってくると可読性が劇的に変わってきます。
同じ挙動をさせるのであれば
余程のことが無い限りは、JOIN句でSQLを記述するのがベストだと思います。