Quelle est la différence entre l'écriture de la condition de filter dans la jointure et après la clause where?

Quelle est la différence entre les requêtes ci-dessous

Select E.EmployeeCode,E.Name,D.DepartmentCode,D.DepartmentName From Employee E inner join Department D on D.DepartmentID=E.DepartmentID Where e.EmployeeType='Developer' 

Contre

 Select E.EmployeeCode,E.Name,D.DepartmentCode,D.DepartmentName From Employee E inner join Department D on D.DepartmentID=E.DepartmentID And e.EmployeeType='Developer' 

Je request en termes de performance. Comment ci-dessus requête performe avec d'énormes données dans les arrays

Pour une INNER JOIN il n'y a pas de différence. Le plan d'exécution pour chaque requête est identique.

Plan d'exécution SQL

Le premier plan est pour la requête:

 Select E.EmployeeCode,E.Name,D.DepartmentCode,D.DepartmentName From Employee E inner join Department D on D.DepartmentID=E.DepartmentID Where e.EmployeeType='Developer' 

Et le deuxième plan est pour la requête:

 Select E.EmployeeCode,E.Name,D.DepartmentCode,D.DepartmentName From Employee E inner join Department D on D.DepartmentID=E.DepartmentID And e.EmployeeType='Developer' 

Par conséquent, la performance de l'une ou l'autre requête sera la même.

Avec des données "énormes", vous pouvez avoir besoin d'index sur les colonnes que vous utilisez dans les conditions WHERE et JOIN , en fonction de l'unicité des valeurs dans ces colonnes. Dans les plans de requête de la capture d'écran, vous pouvez voir que SQL Server effectue une parsing de table, vous pouvez donc vouloir changer cela.