Si nous considérons que vous utilisez à la INNER JOINplace de LEFT JOIN(ce qui semble être votre intention), ces deux requêtes sont fonctionnellement équivalentes. Les optimiseurs de requête examineront et évalueront les critères de votre WHEREclause et de votre FROMclause et prendront en compte tous ces facteurs lors de la création de plans de requête afin d'atteindre le plan d'exécution le plus efficace. Si nous faisons un EXPLAINsur les deux instructions, nous obtenons le même résultat:
Requête 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
[Résultats] :
| 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 |
Requête 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
[Résultats] :
| 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 |
Vous pouvez consulter tous les détails avec les liens suivants. J'ai également créé un exemple SQL 2008 afin que vous puissiez comparer le fonctionnement des deux moteurs (qui est le même):
Exemple de requête MySQL
Exemple de requête SQL 2008 (assurez-vous de «Afficher le plan d'exécution» pour les deux résultats)
               
              
INNER JOIN, mais avec unLEFT JOINcela retournera des résultats différents. Fondamentalement, les conditions que vous avez ajoutées sur leWHEREsur votre deuxième requête convertissent votreJOINsur unINNER JOIN