Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024

Banco de DadosConsultas 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

110
220
330
550
660
770
990
11110
12120
13130

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:

  1. A9, 10, 13, 90 e 9;
  2. B6, 10, 13, 90 e 9;
  3. C6, 10, 10, 90 e 9;
  4. D6, 10, 13, 19 e 9;
  5. 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.

  1. 1INNER = 6 (IDs comuns)
  2. 2LEFT = 9 (tabela A)
  3. 3RIGHT = 10 (tabela B)
  4. 4FULL = 13 (19 − 6)
  5. 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.

Gabarito: letra B

Link permanente: /questoes/fg165250