Considerando as tabela1 e tabela2 apresentadas, julgue o ite...
Considerando as tabela1 e tabela2 apresentadas, julgue o item que se segue, referentes a banco de dados.
Considere que o comando a seguir seja executado sem erro.
select campo from tabela2
where exists
(select campo from tabela1)
Nesse caso, o resultado será a tabela seguinte.
Comentários
Veja os comentários dos nossos alunos
A cláusula EXISTS retorna VERDADEIRO, quando a sua subquery encontra, pelo menos, um resultado, a partir da condição estabelecida.
A condição é essa: (select campo from tabela1)
Percebe que ela sempre retornará um resultado? Então, o EXISTS será VERDADEIRO para todos os casos e a query select campo from tabela2 retornará a coluna inteira da tabela.
Ficando assim:
-----------
campo
-----------
5
-----------
5
-----------
7
-----------
8
-----------
8
-----------
9
-----------
GAB.: ERRADO
O "exists" pode causar muita confusão, pois a ideia por trás dele é testar uma condição (true/false) pra cada linha da query externa.
Nesse caso não é testado nada, pois o resultado da subquery (ou exists) sempre é true independente do conteúdo da tabela1 ou tabela2. Por isso que o resultado final do enunciado deveria ser a tabela2 completa. E dai o gabarito ERRADO.
Mas se eu fosse usar um join ou "where tabela1.campo = tabela2.campo" (dentro do exists) ele poderia dar um true ou false pra cada teste. E isso confunde também, pois o teste não usa toda a tabela da query externa, ele usa apenas 1 única row da tabela externa.
Então o que a banca quis saber do candidato é se ele conhece os dois tipos de EXISTS: aquele que sempre da só TRUE ou só FALSE (resultado tudo ou nada); e aquele EXISTS que pode mudar entre TRUE ou FALSE dependendo da LINHA testada da tabela externa.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo