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