В обычных условиях условия фильтрации могут быть указаны либо в предложениях WHERE, либо в JOIN. Я склонен помещать фильтры в поле WHERE, если только не может быть затронут приоритет OUTER JOIN (см. Ниже) или если фильтр очень специфичен для этой таблицы (например, TYPE = 12 для указания определенного подмножества строк в таблице).
С другой стороны, предложения ON и WHERE могут использоваться для указания условий соединения (в отличие от условий фильтрации). Пока вы используете только ВНУТРЕННИЕ объединения, все равно не будет иметь значения, что вы используете при обычных обстоятельствах.
Однако, если вы используете соединения OUTER, это может иметь большое значение. Если, например, вы указываете OUTER JOIN между двумя таблицами (t1 и t2), но затем в предложении WHERE продолжаете указывать отношение eqijoin между таблицами (например, t1.col = t2.col), вы просто преобразовал НАРУЖНОЕ объединение в ВНУТРЕННЕЕ объединение! Это связано с тем, что WHERE может использоваться для указания эквиджоин (или, может быть, даже OUTER join, в зависимости от версии, с использованием устаревшего синтаксиса * =) без использования предложения ON, и когда WHERE указывает внутреннее эквайоин между таблицами, он переопределяет OUTER ПРИСОЕДИНЯЙТЕСЬ (если есть).
Первоначальный вопрос был о фильтрах, где тип объединения часто не должен быть проблемой, но объединение также может выступать в качестве фильтра, и в таких ситуациях размещение условия объединения, безусловно, может иметь значение.