Pular para o conteúdo principal

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

Banco de DadosConsultas e Comandos em SQL
Código
qa630537
Banca
FUNDATEC
Órgão
Pref Criciúma
Ano
2024
Cargo
AFRM ( )

Para responder às questões 58 a 60, considere um SGBD relacional que contém duas tabelas, uma que contém os dados de municípios, e outra que contém os dados de bairros dos municípios, conforme a representação abaixo:

 

Municípios

bairros

id_municipio

10
12
13
15

id_bairro

id_municipio

115
210
311
 

Foi executada a consulta abaixo:

 

select b.id_municipio from municipios as m right join bairros as b on (m.id_municipio=b.id_municipio) where m.id_municipio is null

 

Qual é o valor esperado como retorno?

  1. ANULL
  2. B11
  3. C12
  4. D13
  5. E15
Revelar gabarito e comentário

GabaritoB — 11

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”.

Resolução

Gabarito: letra B — a conta chega a 11 — alternativa B.

A ideia por trás

Em bancos de dados relacionais, juntar duas tabelas significa combinar suas linhas conforme uma condição. O RIGHT JOIN é uma junção externa: ele devolve todas as linhas da tabela da direita (a que vem depois do RIGHT JOIN) e, para cada uma, tenta encontrar um par na tabela da esquerda. Quando não encontra, preenche com NULL os campos da tabela da esquerda.

A condição de junção define o critério de correspondência. No RIGHT JOIN, a tabela da direita é preservada integralmente; a da esquerda só aparece quando há correspondência. O filtro WHERE ... IS NULL seleciona justamente as linhas em que a correspondência não existiu, ou seja, os registros da direita sem par na esquerda. É uma técnica clássica para achar 'órfãos'.

A questão pede para aplicar esse conceito: identificar quais bairros não têm município correspondente e retornar o id_municipio deles. O passo crucial é montar mentalmente o resultado do RIGHT JOIN e ver onde aparece NULL.

O que a questão dá

  • tabela municipios: ids 10, 12, 13, 15

  • tabela bairros: id_bairro e id_municipio, com três linhas

  • consulta: SELECT b.id_municipio FROM municipios m RIGHT JOIN bairros b ON m.id_municipio = b.id_municipio WHERE m.id_municipio IS NULL

O que queremos: o valor retornado pela consulta

Passo 1 — Comparar os bairros com os municípios

O RIGHT JOIN vai tentar casar cada bairro com um município. Os municípios disponíveis são 10, 12, 13 e 15. Comparando, vemos que os bairros 1 e 2 encontram par (15 e 10), mas o bairro 3, com id_municipio 11, não encontra nenhum município com esse id.

NÃO CAIA NESSA!

Achar que o município 11 existe porque aparece na tabela bairros — mas ele não está na tabela municipios.

Passo 2 — Montar o resultado do RIGHT JOIN

Agora juntamos as duas tabelas. O RIGHT JOIN preserva todas as linhas de bairros. Para os bairros 1 e 2, a coluna m.id_municipio recebe o valor correspondente (15 e 10). Para o bairro 3, como não há município 11, a coluna m.id_municipio fica NULL.

NÃO CAIA NESSA!

Pensar que o RIGHT JOIN descarta o bairro sem par — na verdade ele o mantém com NULL.

Passo 3 — Aplicar o filtro IS NULL

O WHERE m.id_municipio IS NULL seleciona apenas as linhas em que a coluna da esquerda ficou nula, ou seja, os bairros sem município correspondente. No resultado, só a linha do bairro 3 tem m.id_municipio NULL.

NÃO CAIA NESSA!

Confundir com LEFT JOIN: aqui a tabela preservada é a da direita (bairros), então o filtro pega bairros sem município, não municípios sem bairros.

Passo 4 — Selecionar a coluna pedida

A consulta pede SELECT b.id_municipio, ou seja, o valor da coluna id_municipio da tabela bairros para a linha filtrada. Na linha do bairro 3, esse valor é 11.

11\boxed{11}
NÃO CAIA NESSA!

Responder NULL porque a coluna m.id_municipio é nula — mas o SELECT pede b.id_municipio, que é 11.

Resposta: 11 — alternativa B

Link permanente: /questoes/qa630537