Questão de Banco de Dados — PostgreSQL — FUNDATEC 2023
Banco de Dados›PostgreSQL
Código
qa541647
Banca
FUNDATEC
Órgão
PROCERGS
Ano
2023
Cargo
ANC ( )
Considerando o sistema de banco de dados relacional PostgreSQL versão 14, em um banco de dados, existem duas tabelas, A e B, com alguns valores populados, conforme abaixo:
Tabela A
Coluna a
1
2
3
Tabela B
Coluna b
11
12
13
Considere o resultado das duas seguintes queries em SQL:
I. SELECT x FROM X UNION (SELECT y FROM Y LIMIT 1)
II. SELECT x FROM X UNION SELECT y FROM Y LIMIT 1;
Assinale a alternativa que representa o número de linhas resultantes das queries I e II, respectivamente.
A1 – 1.
B6 – 1.
C6 – 6.
D4 – 4.
E4 – 1.
Revelar gabarito e comentário▾
GabaritoE — 4 – 1.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
UNION e LIMIT no PostgreSQL: a precedência que muda o resultado
Gabarito: letra E (4 – 1). A diferença entre as duas queries está na precedência do operador LIMIT em relação ao UNION: na query I, o LIMIT 1 está dentro dos parênteses, limitando apenas a subconsulta SELECT y FROM Y LIMIT 1; na query II, o LIMIT 1 está fora, aplicando-se ao resultado final do UNION. Como o UNION elimina duplicatas, a query I retorna 4 linhas (3 de A + 1 de B) e a query II retorna apenas 1 linha (a primeira do conjunto unido).
O operador UNION combina os resultados de duas ou mais consultas, eliminando linhas duplicadas. No PostgreSQL, a sintaxe é SELECT ... UNION SELECT ..., e o LIMIT é uma cláusula que restringe o número de linhas retornadas. A pegadinha clássica desta questão é a precedência: quando o LIMIT aparece após o UNION sem parênteses, ele se aplica ao resultado final da união, não à última consulta. Já quando está entre parênteses, ele limita apenas a consulta interna.
Vamos analisar cada query com os dados fornecidos:
Tabela A (coluna a): 1, 2, 3
Tabela B (coluna b): 11, 12, 13
Query I:SELECT x FROM X UNION (SELECT y FROM Y LIMIT 1)
Aqui, o LIMIT 1 está dentro dos parênteses, então ele limita a subconsulta SELECT y FROM Y LIMIT 1, que retorna apenas 1 linha (por exemplo, 11). O UNION combina as 3 linhas de X com essa 1 linha de Y, resultando em 4 linhas (1, 2, 3, 11). Como não há duplicatas entre os conjuntos, o resultado tem 4 linhas.
Query II:SELECT x FROM X UNION SELECT y FROM Y LIMIT 1
Aqui, o LIMIT 1 está fora do UNION, aplicando-se ao resultado final da união. O UNION primeiro combina as 3 linhas de X com as 3 linhas de Y, resultando em 6 linhas (1, 2, 3, 11, 12, 13). Depois, o LIMIT 1 restringe o resultado a apenas 1 linha (a primeira, que pode ser 1). Portanto, o resultado tem 1 linha.
A pegadinha está em não perceber que o LIMIT sem parênteses se aplica ao resultado final do UNION, não à última consulta. Muitos candidatos interpretam que o LIMIT 1 limita apenas a segunda consulta, resultando em 4 linhas para ambas as queries, mas isso está incorreto.
Alternativa A — ❌ Incorreta
Afirma que ambas as queries retornam 1 linha. Isso está errado porque a query I retorna 4 linhas, já que o LIMIT 1 dentro dos parênteses limita apenas a subconsulta, e o UNION combina as 3 linhas de A com 1 linha de B. A query II retorna 1 linha, mas a query I não.
Alternativa B — ❌ Incorreta
Afirma que a query I retorna 6 linhas e a query II retorna 1 linha. Isso está errado porque a query I retorna 4 linhas, não 6. O LIMIT 1 dentro dos parênteses reduz a subconsulta a 1 linha, então o UNION combina 3 + 1 = 4 linhas. A query II realmente retorna 1 linha, mas a query I não retorna 6.
Alternativa C — ❌ Incorreta
Afirma que ambas as queries retornam 6 linhas. Isso está errado porque a query I retorna 4 linhas, não 6. O LIMIT 1 dentro dos parênteses limita a subconsulta a 1 linha, então o UNION combina 3 + 1 = 4 linhas. A query II retorna 1 linha, não 6.
Alternativa D — ❌ Incorreta
Afirma que ambas as queries retornam 4 linhas. Isso está errado porque a query II retorna 1 linha, não 4. O LIMIT 1 fora do UNION limita o resultado final a 1 linha. A query I retorna 4 linhas, mas a query II não.
Alternativa E — ✅ Correta ⟵ GABARITO
Afirma que a query I retorna 4 linhas e a query II retorna 1 linha. Isso está correto. Na query I, o LIMIT 1 dentro dos parênteses limita a subconsulta a 1 linha, e o UNION combina as 3 linhas de A com 1 linha de B, resultando em 4 linhas. Na query II, o LIMIT 1 fora do UNION limita o resultado final a 1 linha. Portanto, a alternativa E é a correta.
NÃO CAIA NESSA!
A banca explora a precedência do LIMIT em relação ao UNION. Muitos candidatos assumem que o LIMIT 1 sempre limita a última consulta, mas sem parênteses ele se aplica ao resultado final. Fique atento: parênteses mudam o escopo do LIMIT.
PEGA ESSA DICA!
Para resolver questões assim, identifique onde o LIMIT está: se estiver dentro de parênteses, limita a subconsulta; se estiver fora, limita o resultado final. Desenhe o fluxo: primeiro o UNION, depois o LIMIT.