-
Nenhum cumpre o objetivo, porque não há cláusula colocando a condição dos ids serem diferentes (and x1.id <> x2.id).
-
bem, se vc tiver uma coluna id, tipo
nome | id
--------------------
ana | 1
maria | 2
maria | 3
joao | 4
pedro | 5
pedro | 6
pedro | 7
-----------------
uma saída seria
select distinct x1.nome from x x1, x x2 where x1.nome=x2.nome and x1.id <> x2.id;
produziria como resultado
nome
-----------------
maria
pedro
---------------------
-
A primeira e a segunda query são iguais, porém escritas de forma diferentes. Elas mostram todos os nomes que são iguais entre as duas tabelas. Aparecerão todos, visto que trata-se da mesma tabela. A terceira query quer os nomes diferentes entre as duas tabelas. Como elas são a mesma tabela, aparecerão todos as linhas também, visto que apenas em uma linha eles serão iguais. Nas restantes, os nomes são diferentes, atendendo a query.
Uma query simples que mostra quais nomes se repetem duas ou mais vezes é a seguinte:
select x.nome
from x
group by x.nome
having count(*) >=2
;
-
Essa questão é bem simples de resolver, o avaliador pede que liste um nome que apareça duas ou mais vezes na lista.
Pois bem, vejam que em todas as opções ele começou com a cláusula "Distinct", a mesma elimina os resultados duplicados exibindo apenas os valores individuais. Concluímos então, que nenhuma das opções poderia listar um nome duas ou mais vezes em uma lista, já que a cláusula distinct elimina as redundâncias.
Com isso a resposta correta é a letra D.