Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Subconsulta usando Exists 1 ou Exists *


Não, o SQL Server é inteligente e sabe que está sendo usado para um EXISTS e não retorna NO DATA ao sistema.

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

A lista de seleção de uma subconsulta introduzida por EXISTS quase sempre consiste em um asterisco (*). Não há motivo para listar nomes de colunas porque você está apenas testando se existem linhas que atendem às condições especificadas na subconsulta.

Para verificar a si mesmo, tente executar o seguinte:
SELECT whatever
  FROM yourtable
 WHERE EXISTS( SELECT 1/0
                 FROM someothertable 
                WHERE a_valid_clause )

Se estivesse realmente fazendo algo com a lista SELECT, lançaria um erro div por zero. Não.

EDIT:Observe que o SQL Standard fala sobre isso.

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

3) Caso:
a) Se o <select list> "*" está simplesmente contido em um <subquery> que está imediatamente contido em um <exists predicate> , então o <select list> é equivalente a um <value expression> que é um <literal> arbitrário .