Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024
Banco de Dados›Consultas e Comandos em SQL
Código
fg165256
Banca
FGV
Órgão
TJ MS
Ano
2024
Cargo
Tec NS ( )
Observe as tabelas A e B, que possuem 10 e 12 registros, respectivamente:
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
9
Descrição9
10
Descrição10
Total de Registros: 10
Tabela B
ID
VALOR
1
10
2
20
3
30
4
40
5
50
6
60
7
70
8
80
9
90
11
110
12
120
13
130
Total de Registros: 12
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:
A10, 12, 22, 120 e 10;
B9, 10, 13, 120 e 10;
C9, 12, 13, 120 e 10;
D9, 12, 22, 120 e 10;
E9, 12, 13, 22 e 10.
Revelar gabarito e comentário▾
GabaritoC — 9, 12, 13, 120 e 10;
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: INNER, RIGHT, FULL OUTER, CROSS e LEFT
Gabarito: letra C — os totais são, respectivamente, 9, 12, 13, 120 e 10. O INNER JOIN retorna apenas os registros com correspondência nas duas tabelas (IDs 1 a 9, pois o ID 10 de A não existe em B e os IDs 11, 12 e 13 de B não existem em A); o RIGHT JOIN preserva todos os registros de B (12); o FULL OUTER JOIN une os registros de ambas, sem duplicar as correspondências (9 comuns + 1 só de A + 3 só de B = 13); o CROSS JOIN é o produto cartesiano (10 × 12 = 120); e o LEFT JOIN preserva todos os registros de A (10).
As junções (JOINs) são operações fundamentais em bancos de dados relacionais, usadas para combinar registros de duas ou mais tabelas com base em uma condição de correspondência entre colunas. Cada tipo de junção define quais registros aparecem no resultado e como os registros sem correspondência são tratados. A diferença crucial está na palavra "externa" (OUTER): enquanto o INNER JOIN descarta tudo que não tem par, as junções externas (LEFT, RIGHT e FULL) preservam registros de um ou ambos os lados, preenchendo com NULL as colunas da tabela que não teve correspondência.
Vamos analisar os dados concretos. A tabela A tem IDs de 1 a 10 (10 registros). A tabela B tem IDs 1 a 9, 11, 12 e 13 (12 registros). A condição de junção é a igualdade de IDs. Os IDs comuns às duas tabelas são 1, 2, 3, 4, 5, 6, 7, 8 e 9 — 9 registros correspondentes. O ID 10 existe apenas em A; os IDs 11, 12 e 13 existem apenas em B.
Agora, o raciocínio para cada junção:
INNER JOIN: retorna somente as linhas com correspondência em ambas as tabelas. Como há 9 IDs comuns, o resultado tem 9 linhas.
RIGHT JOIN: retorna todas as linhas da tabela da direita (B) e as correspondências da esquerda (A). Como B tem 12 registros, o resultado tem 12 linhas (os 9 comuns + os 3 exclusivos de B, com colunas de A preenchidas com NULL).
FULL OUTER JOIN: retorna todas as linhas de ambas as tabelas, unindo as correspondências sem duplicá-las. São 9 comuns + 1 exclusivo de A + 3 exclusivos de B = 13 linhas.
CROSS JOIN: produto cartesiano, cada linha de A combinada com cada linha de B. São 10 × 12 = 120 linhas.
LEFT JOIN: retorna todas as linhas da tabela da esquerda (A) e as correspondências da direita (B). Como A tem 10 registros, o resultado tem 10 linhas (os 9 comuns + o ID 10 exclusivo de A, com colunas de B preenchidas com NULL).
A pegadinha clássica desta questão é confundir o FULL OUTER JOIN com a soma simples dos totais das duas tabelas (10 + 12 = 22). Isso estaria errado porque as linhas correspondentes (os 9 IDs comuns) apareceriam duplicadas — o FULL OUTER JOIN as une em uma única linha. Outra armadilha é inverter LEFT e RIGHT: o LEFT preserva a tabela citada à esquerda no comando (A), e o RIGHT preserva a da direita (B).
NÃO CAIA NESSA!
A banca explora a confusão entre FULL OUTER JOIN e a soma dos totais das tabelas. O candidato apressado soma 10 + 12 = 22 e marca a alternativa A ou D. Mas o FULL OUTER JOIN não duplica as linhas correspondentes: os 9 IDs comuns aparecem uma única vez. O cálculo correto é 9 (comuns) + 1 (só A) + 3 (só B) = 13. Lembre-se: a junção externa completa une, não soma.
1Identificar IDs comuns (9)
2INNER = 9 (só comuns)
3RIGHT = 12 (todos de B)
4FULL = 13 (9+1+3)
5CROSS = 120 (10×12)
6LEFT = 10 (todos de A)
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Erra no INNER JOIN (10 em vez de 9) e no FULL OUTER JOIN (22 em vez de 13). O INNER JOIN não pode retornar 10, pois o ID 10 de A não tem correspondência em B — ele é descartado. E o FULL OUTER JOIN não é a soma dos totais (10 + 12 = 22), pois as 9 linhas correspondentes seriam duplicadas; o correto é 9 + 1 + 3 = 13.
Alternativa B — ❌ Incorreta
Erra no RIGHT JOIN (10 em vez de 12). O RIGHT JOIN preserva todos os registros da tabela da direita (B), que tem 12 registros — incluindo os IDs 11, 12 e 13, que não têm correspondência em A. O valor 10 corresponderia ao LEFT JOIN, não ao RIGHT.
Alternativa C — ✅ Correta ⟵ GABARITO
Apresenta exatamente os valores calculados: INNER = 9 (IDs comuns), RIGHT = 12 (todos de B), FULL OUTER = 13 (9 comuns + 1 só de A + 3 só de B), CROSS = 120 (10 × 12) e LEFT = 10 (todos de A). Cada número reflete corretamente a semântica da respectiva junção.
Alternativa D — ❌ Incorreta
Erra no FULL OUTER JOIN (22 em vez de 13). Repete o erro da alternativa A: trata o FULL OUTER JOIN como a soma dos totais das tabelas (10 + 12 = 22), ignorando que as linhas correspondentes são unidas, não duplicadas.
Alternativa E — ❌ Incorreta
Erra no CROSS JOIN (22 em vez de 120). O CROSS JOIN é o produto cartesiano: cada uma das 10 linhas de A combinada com cada uma das 12 linhas de B, resultando em 10 × 12 = 120 linhas. O valor 22 não corresponde a nenhuma operação de junção aqui — seria a soma dos totais, que não é o que o CROSS JOIN faz.
A regra de ouro para questões de junção: identifique primeiro os registros correspondentes (INNER), depois pergunte quem é preservado — esquerda (LEFT), direita (RIGHT) ou ambos (FULL). O CROSS JOIN é sempre o produto dos tamanhos. Com esse método, você resolve qualquer variação do tema.