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

Sous-requête utilisant Existe 1 ou Existe *

Non, SQL Server est intelligent et sait qu'il est utilisé pour un EXISTS et ne renvoie AUCUNE DONNEE au système.

Quoth Microsoft :http://technet.microsoft.com/en-us/library/ms189259.aspx?ppud=4

La liste de sélection d'une sous-requête introduite par EXISTS se compose presque toujours d'un astérisque (*). Il n'y a aucune raison de répertorier les noms de colonne car vous testez simplement si les lignes qui remplissent les conditions spécifiées dans la sous-requête existent.

Pour vérifier vous-même, essayez d'exécuter ce qui suit :

SELECT whatever
  FROM yourtable
 WHERE EXISTS( SELECT 1/0
                 FROM someothertable 
                WHERE a_valid_clause )

S'il faisait réellement quelque chose avec la liste SELECT, il lancerait une erreur div par zéro. Ce n'est pas le cas.

EDIT :Notez que la norme SQL en parle réellement.

Norme ANSI SQL 1992, page 191 http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

3) Cas :
a) Si le <select list> "*" est simplement contenu dans un <subquery> qui est immédiatement contenu dans un <exists predicate> , puis le <select list> est équivalent à un <value expression> c'est un <literal> arbitraire .