Se considerarmos que você usa em INNER JOINvez de LEFT JOIN(que parece ser sua intenção), essas duas consultas são funcionalmente equivalentes. Os otimizadores de consulta revisarão e avaliarão os critérios em sua WHEREcláusula e sua FROMcláusula e considerarão todos esses fatores ao criar planos de consulta para alcançar o plano de execução mais eficiente. Se fizermos um EXPLAINem ambas as instruções, obteremos o mesmo resultado:
Consulta 1 :
EXPLAIN
SELECT
tableA.ColA
,tableA.ColB
,tableA.ColC
,tableA.ColD
,tableA.ColE
FROM tableA
JOIN tableB ON tableA.ColA=tableB.ColA
WHERE
tableA.ColB=tableB.ColB
AND tableA.ColC=tableB.ColC
AND tableA.ColD=tableB.ColD
AND tableA.ColE=tableB.ColE
[Resultados] :
| ID | SELECT_TYPE | TABLE | TYPE | POSSIBLE_KEYS | KEY | KEY_LEN | REF | ROWS | EXTRA |
------------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | tableA | ALL | (null) | (null) | (null) | (null) | 1 | |
| 1 | SIMPLE | tableB | ALL | (null) | (null) | (null) | (null) | 1 | Using where; Using join buffer |
Consulta 2 :
EXPLAIN
SELECT
tableA.ColA
,tableA.ColB
,tableA.ColC
,tableA.ColD
,tableA.ColE
FROM tableA
JOIN tableB ON tableA.ColA=tableB.ColA
AND tableA.ColB=tableB.ColB
AND tableA.ColC=tableB.ColC
AND tableA.ColD=tableB.ColD
WHERE
tableA.ColE=tableB.ColE
[Resultados] :
| ID | SELECT_TYPE | TABLE | TYPE | POSSIBLE_KEYS | KEY | KEY_LEN | REF | ROWS | EXTRA |
------------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | tableA | ALL | (null) | (null) | (null) | (null) | 1 | |
| 1 | SIMPLE | tableB | ALL | (null) | (null) | (null) | (null) | 1 | Using where; Using join buffer |
Você pode revisar os detalhes completos com os seguintes links. Também criei um exemplo do SQL 2008 para que você possa comparar como os dois mecanismos funcionam (que é o mesmo):
Exemplo de consulta MySQL
Exemplo de consulta do SQL 2008 (verifique 'Exibir plano de execução' para os dois resultados)
INNER JOIN, mas com umLEFT JOINisso retornará resultados diferentes. Basicamente, as condições que você adicionou naWHEREem sua segunda consulta estão convertendo o seuJOINem umINNER JOIN