Dans des circonstances ordinaires, les conditions de filtrage peuvent être spécifiées dans les clauses WHERE ou JOIN. J'ai tendance à placer des filtres sous WHERE à moins que la priorité OUTER JOIN ne soit affectée (voir ci-dessous) ou si le filtre est très spécifique à cette table (par exemple TYPE = 12 pour spécifier un sous-ensemble spécifique de lignes dans la table).
D'un autre côté, les clauses ON et WHERE peuvent être utilisées pour spécifier des conditions de jointure (par opposition aux conditions de filtrage). Tant que vous n'utilisez que des jointures INNER, peu importe ce que vous utilisez dans des circonstances ordinaires.
Cependant, si vous utilisez des jointures externes, cela peut faire une grande différence. Si, par exemple, vous spécifiez un OUTER JOIN entre deux tables (t1 et t2) mais que, dans la clause WHERE, continuez à spécifier une relation eqijoin entre les tables (par exemple t1.col = t2.col), vous avez juste converti la jointure OUTER en jointure INNER! En effet, WHERE peut être utilisé pour spécifier une équijoin (ou peut-être même une jointure OUTER, selon la version, en utilisant la syntaxe obsolète * =) sans utiliser de clause ON, et lorsque WHERE indique une équijoin interne entre les tables, elle remplace une OUTER REJOIGNEZ (le cas échéant).
La question initiale concernait les filtres, où le type de jointure ne devrait souvent pas être un problème, mais une jointure peut également agir comme un filtre et dans ces situations, le placement de la condition de jointure peut certainement avoir de l'importance.