Considere a tabela teste, com uma coluna apenas, intitulada ...
select distinct * from teste; select * from teste union select * from teste; select distinct numero from teste; select numero from teste group by numero;
Desconsiderando eventuais inversões na ordem em que os valores são apresentados, assinale a conclusão correta com relação à equivalência dos resultados dessa execução.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: E - Todos apresentam o mesmo resultado.
Para resolver essa questão, é necessário compreender como os operadores DISTINCT e UNION, além do comando GROUP BY, funcionam em SQL. Eles são usados para eliminar linhas duplicadas em um conjunto de resultados ou em duas tabelas unidas.
O DISTINCT é utilizado para retornar apenas valores distintos. No contexto da questão, o comando SELECT DISTINCT * FROM teste; irá retornar todos os números distintos presentes na tabela, ou seja, 1, 2, 3, 4 e 5.
O operador UNION combina os resultados de dois ou mais SELECT comandos em um único conjunto de resultados, eliminando linhas duplicadas por padrão. Então, o comando SELECT * FROM teste UNION SELECT * FROM teste; retornará o mesmo conjunto de números únicos 1, 2, 3, 4 e 5.
Quando usamos DISTINCT em uma única coluna, como em SELECT DISTINCT numero FROM teste;, o resultado será também os números sem repetição: 1, 2, 3, 4 e 5.
O último comando, SELECT numero FROM teste GROUP BY numero;, é frequentemente utilizado em operações de agregação, mas, neste caso, sem funções agregadas, o efeito é simplificar o resultado para grupos de números unique, assim como o DISTINCT faz.
Por que a alternativa E está correta? Todas as instruções SQL apresentadas na questão têm como objetivo retornar valores únicos da coluna numero. Embora sejam comandos diferentes com propósitos normalmente distintos, no contexto do problema dado, todos resultam no mesmo conjunto de números únicos: 1, 2, 3, 4 e 5, independentemente de possíveis inversões na ordem de apresentação dos valores.
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
Pegadinha malandra na questão, mas vamos nessa..
1) //select distinct /* from teste;
Como o distinct retira repetições, o resultado do sql será 1,2,3,4,5
2)//select * from teste unio/n/ select * from teste;
O union por sua vez, TAMBÉM elimina repetições, ou seja, será retornado 1,2,3,4,5
3) //select distinct numer//o from teste;
Exatamente como o 1º select, o distinct elimina repetições, resultado: 1,2,3,4,5
Aqui vem a pegadinha, a meu ver é claro!
4) //select numero from// teste group by numero;
O select irá agrupar pela coluna numero, e com isso IRÁ ELIMINAR AS REPETIÇÕES, pois em vez de aparecer 1,2,3,3,4,4,5 ( resultado sem o group by), após o group by teremos 1,2,3,4,5
GABARITO LETRA E, todas apresentam o mesmo resultado (1,2,3,4,5)
Obs.: Por favor ignore as barras no meio dos comandos sql, mas somente assim o site deixou eu publicar o comentário
http://sqlfiddle.com/#!9/43168d/5
Uma das avaliações feitas na questão é sobre o conhecimento da clausula UNION.
UNION: realiza distinct
UNION ALL: não realiza distinct
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo