Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024
Banco de Dados›Consultas e Comandos em SQL
Código
fg165250
Banca
FGV
Órgão
TJ MS
Ano
2024
Cargo
Tec NS ( )
Observe as tabelas A e B a seguir, que possuem, respectivamente, 9 e 10 registros.
Tabela A
ID
DESCRICAO
1
Descrição1
2
Descrição2
3
Descrição3
4
Descrição4
5
Descrição5
6
Descrição6
7
Descrição7
8
Descrição8
10
Descrição10
Total de Registros: 9
Tabela B
ID
VALOR
1
10
2
20
3
30
5
50
6
60
7
70
9
90
11
110
12
120
13
130
Total de Registros: 10
Após executar diferentes tipos de junções entre essas tabelas, o total de registros retornados em cada caso, sendo eles INNER JOIN, RIGHT JOIN, FULL OUTER JOIN, CROSS JOIN e LEFT JOIN, é, respectivamente:
A9, 10, 13, 90 e 9;
B6, 10, 13, 90 e 9;
C6, 10, 10, 90 e 9;
D6, 10, 13, 19 e 9;
E6, 12, 13, 90 e 9.
Revelar gabarito e comentário▾
GabaritoB — 6, 10, 13, 90 e 9;
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”.
Junções SQL: contagem de registros em INNER, RIGHT, FULL, CROSS e LEFT JOIN
Gabarito: letra B. A contagem correta é 6 (INNER), 10 (RIGHT), 13 (FULL), 90 (CROSS) e 9 (LEFT). O INNER JOIN retorna apenas as linhas com correspondência nas duas tabelas (IDs 1, 2, 3, 5, 6 e 7 = 6 linhas); o RIGHT JOIN preserva todas as 10 linhas da tabela da direita; o FULL OUTER JOIN soma as linhas das duas tabelas (19) e subtrai as 6 correspondências, resultando em 13; o CROSS JOIN multiplica 9 × 10 = 90; e o LEFT JOIN preserva as 9 linhas da tabela da esquerda. A alternativa B é a única que apresenta exatamente essa sequência.
As junções (JOINs) são operações da álgebra relacional que combinam linhas de duas ou mais tabelas com base em uma condição de correspondência — no caso, a igualdade entre os campos ID das tabelas A e B. Cada tipo de junção trata de forma diferente as linhas que não encontram par na outra tabela, e é exatamente essa diferença que determina a quantidade de registros retornados. Vamos entender cada uma:
INNER JOIN — retorna somente as linhas que possuem correspondência nas duas tabelas. É a junção mais restritiva: linhas sem par são descartadas. Na questão, os IDs presentes em ambas as tabelas são 1, 2, 3, 5, 6 e 7 — exatamente 6 registros.
LEFT JOIN — retorna todas as linhas da tabela da esquerda (a primeira mencionada no comando) e as correspondências da tabela da direita. Se uma linha da esquerda não tiver correspondência, os campos da direita vêm como NULL. Como a tabela A tem 9 registros e nenhum ID se repete na tabela B, o resultado tem exatamente 9 linhas.
RIGHT JOIN — é o espelho do LEFT JOIN: retorna todas as linhas da tabela da direita e as correspondências da esquerda. A tabela B tem 10 registros, e como nenhum ID se repete na tabela A, o resultado tem 10 linhas.
FULL OUTER JOIN — retorna todas as linhas de ambas as tabelas, preenchendo com NULL os campos sem correspondência. O total é a soma das linhas das duas tabelas (9 + 10 = 19) menos as linhas que já foram contadas nas duas (as 6 correspondências), resultando em 13 linhas.
CROSS JOIN — é o produto cartesiano: cada linha da tabela A é combinada com todas as linhas da tabela B, sem condição de correspondência. O total é a multiplicação 9 × 10 = 90 linhas.
A pegadinha clássica desta questão está em confundir o FULL OUTER JOIN com a soma simples das duas tabelas (19) ou com o tamanho da maior tabela (10). O correto é subtrair as correspondências para não contá-las duas vezes. Outra armadilha é inverter LEFT e RIGHT JOIN — o LEFT preserva a tabela da esquerda (A, 9 linhas) e o RIGHT preserva a da direita (B, 10 linhas).
NÃO CAIA NESSA!
A banca explora a confusão entre FULL OUTER JOIN e a soma das tabelas. O candidato apressado soma 9 + 10 = 19 e marca a alternativa D, esquecendo que as 6 linhas correspondentes apareceriam duplicadas. O cálculo correto é 19 − 6 = 13. Outra troca comum é inverter LEFT (9) com RIGHT (10) — lembre-se: o LEFT JOIN preserva a tabela que está à esquerda no comando, e o RIGHT JOIN preserva a da direita.
1INNER = 6 (IDs comuns)
2LEFT = 9 (tabela A)
3RIGHT = 10 (tabela B)
4FULL = 13 (19 − 6)
5CROSS = 90 (9 × 10)
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Erra no INNER JOIN: afirma 9, mas o INNER retorna apenas as 6 linhas com correspondência nas duas tabelas (IDs 1, 2, 3, 5, 6 e 7). O valor 9 corresponde ao total de linhas da tabela A, que é o resultado do LEFT JOIN, não do INNER.
Alternativa B — ✅ Correta ⟵ GABARITO
Apresenta exatamente a sequência correta: INNER = 6 (correspondências), RIGHT = 10 (todas as linhas da tabela B), FULL = 13 (19 − 6), CROSS = 90 (9 × 10) e LEFT = 9 (todas as linhas da tabela A).
Alternativa C — ❌ Incorreta
Erra no FULL OUTER JOIN: afirma 10, que é apenas o tamanho da tabela B (ou da maior tabela). O FULL OUTER JOIN retorna 13 linhas, pois soma as 19 linhas das duas tabelas e subtrai as 6 correspondências para evitar duplicidade.
Alternativa D — ❌ Incorreta
Erra no CROSS JOIN: afirma 19, que é a soma das linhas das duas tabelas (9 + 10), não o produto cartesiano. O CROSS JOIN multiplica: 9 × 10 = 90 linhas.
Alternativa E — ❌ Incorreta
Erra no RIGHT JOIN: afirma 12, mas o RIGHT JOIN preserva todas as 10 linhas da tabela da direita (B). O valor 12 não corresponde a nenhum cálculo direto — seria a soma de 9 + 3, sem fundamento. O correto é 10.