これはめちゃくちゃ個人的な意見ですが...
僕はテーブル結合を行うときはINNER JOIN
を使っています。理由は簡単で、テーブル結合をするための構文がINNER JOIN
であり、そのように記述することで文脈的にもデータの動き方的にも理解しやすいと感じるからです。WHERE
句を用いた結合の時とINNER JOIN
を使った時、僕は頭でこんな感じの処理が走ります。
INNER JOIN
のとき
1. 1つめのテーブルを取得する
2. テーブルの各行に、あるテーブルの条件にあるカラムを結合していく
WHERE
句のとき
1. はじめに2つのテーブルの直積が作られる
2. 直積のテーブルから条件に合わない行を削除していく
↑の処理を脳内再生したときに、テーブル結合という意味でいうとやはりINNER JOIN
の方が直感的だなと感じます。
Like!
後からの読みやすさのためにINNER JOIN
を書きます。
結合のための条件も、絞り込むための条件も、必ずひとつとは限りません。後から増やすこともあるでしょう。
なので、
SELECT
*
FROM
T1, T2
WHERE
T1.UserId = T2.UserId
AND T1.TaskId = T2.TaskId -- ここまでが結合のための条件だが、ぱっと見区別付きにくい
AND T1.Status = 'Active'
AND T1.Cost < T2.Cost
よりも
SELECT
*
FROM
T1
INNER JOIN
T2 ON
T1.UserId = T2.UserId
AND T1.TaskId = T2.TaskId
WHERE
T1.Status = 'Active'
AND T1.Cost < T2.Cost
のほうが、宣言的かつ明快でいいかな~という感じです。
Like!