quarta-feira, 16 de fevereiro de 2011

O Desafio do UNION

Esse desafio foi lançado por Arlindo, amigo e companheiro de trabalho, essa poderia ser uma questão de concurso público... e que muitos se atrapalhariam na hora de responder.

Vamos a Pergunta!

Levando em consideração que as duas querys abaixo, retornam o mesmo valor, a primeira roda no Postgres, MySQL e SQL Server e a segunda no Oracle.
Qual o valor de retorno delas? (Não vale colar! Responda sem executar a query!)

--No Postgres, MySQL, SQL Server 
     SELECT sum(x.a) 
       FROM 
          (
               SELECT 10 AS a
               UNION
               SELECT 10 AS a
          ) x
          ;

--No Oracle  
     SELECT sum(x.a) 
       FROM 
          (
               SELECT 10 AS a FROM dual
               UNION 
               SELECT 10 AS a FROM dual
          ) x
          ;          


Opções:

a)20
b)40
c)10
d)0
e)NULL

Um comentário:

  1. Resposta: Letra c = 10, já que o UNION simples faz um DISTINCT antes, para o somatório ficar igual a opção a = 20, isto é somar mesmo sendo com linhas iguais, seria necessário substituir UNION por UNION ALL.

    ResponderExcluir