sql >> Base de Datos >  >> RDS >> Sqlserver

Subconsulta usando Existe 1 o Existe *

No, SQL Server es inteligente y sabe que se está utilizando para EXISTE, y NO devuelve DATOS al sistema.

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

La lista de selección de una subconsulta introducida por EXISTS casi siempre consta de un asterisco (*). No hay ninguna razón para enumerar los nombres de las columnas porque solo está probando si existen filas que cumplan con las condiciones especificadas en la subconsulta.

Para comprobarlo, intente ejecutar lo siguiente:

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

Si realmente estuviera haciendo algo con la lista SELECT, arrojaría un div por error cero. No es así.

EDITAR:Tenga en cuenta que el estándar SQL en realidad habla de esto.

Estándar ANSI SQL 1992, página 191 http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

3) Caso:
a) Si el <select list> "*" simplemente está contenido en un <subquery> que está contenido inmediatamente en un <exists predicate> , luego el <select list> es equivalente a un <value expression> eso es un <literal> arbitrario .