サイモンが指摘したように、パフォーマンスの違いは無視できるはずです。主な関心事は、クエリが意図を正しく表現していることと、(特に) 期待される結果が得られることです。
通常、フィルターが結合の条件である場合にのみ、フィルターを JOIN 句に追加します。ほとんどの場合 (すべてではない)、フィルターは WHERE 句に適用する必要があります。これは、結合自体ではなく、クエリ全体のフィルターであるためです。
私の知る限り、これがクエリの結果に実際に影響する唯一のインスタンスは、OUTER JOIN を使用する場合です。
次のクエリを検討してください。
SELECT *
FROM Customer c
LEFT JOIN Orders o ON c.CustomerId = o.CustomerId
WHERE o.OrderType = "InternetOrder"
対。
SELECT *
FROM Customer c
LEFT JOIN Orders o ON c.CustomerId = o.CustomerId AND o.OrderType = "InternetOrder"
1 つ目は、注文タイプが「インターネット注文」の顧客注文ごとに 1 行を返します。実際には、フィルタがクエリ全体に適用されたため、左側の結合は内部結合になっています (つまり、"InternetOrder" を持たない顧客はまったく返されません)。
2 番目は、顧客ごとに少なくとも 1 つの行を返します。顧客が注文タイプ「インターネット注文」の注文を持っていない場合、すべての注文テーブル フィールドに対して null 値が返されます。それ以外の場合、「インターネット注文」タイプの顧客注文ごとに 1 行が返されます。