Questão de Banco de Dados — Consultas e Comandos em SQL — FUNDATEC 2024
Banco de Dados›Consultas 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
1
15
2
10
3
11
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?
ANULL
B11
C12
D13
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.
NÃO CAIA NESSA!
Responder NULL porque a coluna m.id_municipio é nula — mas o SELECT pede b.id_municipio, que é 11.