Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

EXISTS vs JOIN et utilisation de la clause EXISTS

EXISTS est utilisé pour renvoyer une valeur booléenne, JOIN renvoie une toute autre table

EXISTS n'est utilisé que pour tester si une sous-requête renvoie des résultats et court-circuite dès qu'elle le fait. JOIN est utilisé pour étendre un jeu de résultats en le combinant avec des champs supplémentaires d'une autre table avec laquelle il existe une relation.

Dans votre exemple, les requêtes sont sémantiquement équivalentes.

En général, utilisez EXISTS quand :

  • Vous n'avez pas besoin de renvoyer les données de la table associée
  • Vous avez des doublons dans la table associée (JOIN peut provoquer des lignes en double si les valeurs sont répétées)
  • Vous voulez vérifier l'existence (utilisez à la place de LEFT OUTER JOIN...NULL état)

Si vous avez des index appropriés, la plupart du temps, le EXISTS fonctionnera de la même manière que le JOIN . L'exception concerne les sous-requêtes très compliquées, où il est normalement plus rapide d'utiliser EXISTS .

Si votre JOIN la clé n'est pas indexée, il peut être plus rapide d'utiliser EXISTS mais vous devrez tester votre situation spécifique.

JOIN la syntaxe est plus facile à lire et plus claire normalement aussi.