Considere os comandos SQL a seguir.I.select r.* FROM R where...
III. select r.* FROM R where r.a in (select c FROM S)
IV. select r.* FROM R where exists (select 1 FROM S where r.a = s.c)
V. select distinct r.* FROM R, S where r.a = s.c
Sabe-se que quatro desses comandos sempre produzem resultados com conteúdos idênticos, mesmo considerando-se diferentes instâncias de R e S.
O comando que NÃO faz parte desse grupo é:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: E.
A questão trata sobre a equivalência lógica entre diferentes comandos SQL, que visam selecionar dados de uma tabela baseando-se na existência de correspondência em outra tabela. Os conhecimentos necessários para resolver a questão estão voltados para a compreensão de subconsultas, a cláusula EXISTS, o operador IN, a contagem de resultados através da função COUNT(*) e o entendimento de junções de tabelas.
As alternativas de I a IV empregam técnicas distintas para atingir o mesmo resultado, ou seja, selecionar todos os registros da tabela R que possuem correspondência na tabela S:
- EXISTS verifica se existe ao menos uma linha que satisfaça a condição especificada;
- COUNT(*) maior que zero verifica se há ao menos uma correspondência, similar ao EXISTS;
- IN seleciona as linhas de R onde o valor de a corresponde a qualquer valor da coluna c retornada pela subconsulta da tabela S;
- O uso de SELECT 1 também é uma variação do EXISTS, onde o que importa é a existência da linha, não o valor retornado pela subconsulta.
No entanto, a alternativa E utiliza uma junção implícita entre as tabelas R e S, junto com o uso de DISTINCT para eliminar duplicatas. Apesar de buscar a correspondência entre as colunas a de R e c de S, como nas outras alternativas, a forma como a junção é feita pode resultar em múltiplas linhas para uma única linha de R, se houver mais de uma correspondente em S. O uso do DISTINCT pode eliminar duplicidades resultantes da junção, mas não muda o fato de que a junção pode combinar uma única linha de R com várias linhas de S, potencialmente gerando mais linhas antes da aplicação do DISTINCT do que as subconsultas usadas nas outras alternativas. Portanto, a alternativa E, apesar de poder ter um resultado visualmente semelhante após a aplicação do DISTINCT, realiza um processo diferente para chegar ao resultado final e, por isso, tem um comportamento distinto quando comparada às alternativas de I a IV.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
distinct
Em SQL é uma clásula que:
Retorna os registros distintos de uma mesma tabela
Ignora os repetidos
Letra E
I, II e IV são iguais, mas o III não é igual. I, II e IV é: "retorne TUDO da tabela R se ouver alguma relação entre R e S", já o III é: "Retorne APENAS os registro de R que tiverem relação com S". Estou errado? Alguém poderia me explicar?
Não entendi essa questão, alguém me explica?
Tanto o count quanto o in tem a mesma função que o exists em suas cláusulas, validam a condição para que o select seja realizado.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo