-
Apesar de não falar em SGBD específico, fiz o teste no Oracle. Não deu essa resposta. Se a tabela agro1 tiver valores repetidos, tipo 1,1,2,3, o IN não elimina esses valores. Ao contrário do DISTINCT que elimina na resposta.
-
Acabei de testar no MySql e assim como Rosana citou não houve eliminação de valores duplicados ao usar IN. A resposta da questão deveria ser a opção B.
-
Em testes no Firebird funcionou, mas apenas se os atributos Ag1Regiao e Ag2Regiao não forem PK das respectivas tabelas, como a questão não mencionou se são chaves primárias a resposta é a opção A.
Sem o distinct os registros apresentam duplicados.
-
Porque não pode ser a letra B ? Alguém explica por favor ?
Grata!
-
A única diferença da A com a B é o DISTINCT que torna a A "mais correta". A instrução IN retorna os registros que possuem o mesmo valor em ambas tabelas de forma distinta. Como a alternativa B pode retornar resultados com valores idênticos o gabarito é a letra A.
-
A instrução IN não retorna os valores distintos. Observem a consulta original:
SELECT * FROM agro1 WHERE Ag1Regiao IN (SELECT Ag2Regiao FROM agro2);
O que faz essa consulta retornar os valores distintos não é o IN, e sim o SELECT * FROM agro1. Isso por si só garante que todas as tuplas retornadas são distintas, visto que uma relação não pode ter tuplas repetidas (a chave primária garante isso).
-
Acho que o Gabarito seria mesmo o B. Vide:
http://sqlfiddle.com/#!9/2282b6/3/0
-
Gab A.
Seja a tabela agro1(id, Ag1Regiao) com os valores:
- (1, 1)
- (2, 1)
Seja a tabela agro2(id, Ag2Regiao) com os valores
- (1, 1)
- (2, 1)
Resultado da A:
- (1, 1)
- (2, 1)
Resultado da B:
- (1, 1) -> correspondente ao agro2(1, 1)
- (1, 1) -> correspondente ao agro2(2, 1)
- (2, 1) -> correspondente ao agro2(1, 1)
- (2, 1) -> correspondente ao agro2(2, 1)
-
Quem errou acertou e quem acertou errou. Parabéns, FGV!