Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Sottoquery utilizzando Exists 1 o Exists *

No, SQL Server è intelligente e sa che viene utilizzato per un EXISTS e non restituisce NESSUN DATO al sistema.

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

L'elenco di selezione di una sottoquery introdotta da EXISTS è quasi sempre costituito da un asterisco (*). Non c'è motivo per elencare i nomi delle colonne perché stai solo verificando se esistono righe che soddisfano le condizioni specificate nella sottoquery.

Per verificare te stesso, prova a eseguire quanto segue:

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

Se stesse effettivamente facendo qualcosa con l'elenco SELECT, genererebbe un errore div by zero. Non è così.

EDIT:Nota, lo standard SQL ne parla in realtà.

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

3) Caso:
a) Se il <select list> "*" è semplicemente contenuto in un <subquery> thatè immediatamente contenuto in un <exists predicate> , quindi il <select list> èequivalente a un <value expression> questo è un <literal> arbitrario .