Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FGV 2026

Banco de DadosSQL
Código
fg130050
Banca
FGV
Órgão
AMAZUL
Ano
2026
Nível
Médio
Cargo
Técnico de Informática

Considere o seguinte script SQL ANSI para responder à próxima questão.


Imagem da questão

Ao analisar a consulta SQL ANSI a seguir:Imagem associada para resolução da questãoÉ correto afirmar que seu objetivo é apresentar o código e o título dos projetos armazenados na tabela
  1. ADESENVOLVIMENTO_TECNOLOGICO que se não se relacionam à tabela PROJETO_PESQUISA.
  2. BDESENVOLVIMENTO_TECNOLOGICO que se relacionam ou não à tabela PROJETO_PESQUISA.
  3. CPROJETO_PESQUISA que estão ou não relacionados a tuplas da tabela DESENVOLVIMENTO_TECNOLOGICO.
  4. DPROJETO_PESQUISA que não estão relacionados a nenhuma tupla da tabela DESENVOLVIMENTO_TECNOLOGICO.
  5. EPROJETO_PESQUISA relacionados a projetos que possuem ocorrências na tabela DESENVOLVIMENTO_TECNOLOGICO.
Revelar gabarito e comentário

GabaritoD — PROJETO_PESQUISA que não estão relacionados a nenhuma tupla da tabela DESENVOLVIMENTO_TECNOLOGICO.

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

SQL: junção externa esquerda (LEFT JOIN) e registros sem correspondência

Gabarito: letra D. A consulta usa um LEFT JOIN entre PROJETO_PESQUISA e DESENVOLVIMENTO_TECNOLOGICO, e a cláusula WHERE filtra as linhas em que a coluna da tabela da direita é nula — o que devolve exatamente os projetos de pesquisa que não possuem nenhuma tupla correspondente na tabela de desenvolvimento tecnológico. Essa é a técnica clássica para encontrar registros "órfãos" em SQL.

O LEFT JOIN (junção externa esquerda) é uma das junções mais cobradas em provas de banco de dados, justamente porque inverte a lógica da junção interna: em vez de descartar as linhas sem par, ela preserva todas as linhas da tabela à esquerda e preenche com NULL os campos da tabela à direita quando não há correspondência. No comando, a tabela PROJETO_PESQUISA está à esquerda do JOIN, então todas as suas tuplas aparecem no resultado — as que têm correspondência vêm com os dados de DESENVOLVIMENTO_TECNOLOGICO, e as que não têm vêm com valores nulos nas colunas dessa tabela.

O pulo do gato está na cláusula WHERE. Depois que o LEFT JOIN monta o resultado com os nulos, o filtro WHERE DESENVOLVIMENTO_TECNOLOGICO.codigo IS NULL (ou similar) elimina justamente as linhas que tiveram correspondência, sobrando apenas as tuplas de PROJETO_PESQUISA sem par na outra tabela. É o padrão "anti-join": primeiro une tudo, depois descarta o que casou. Se o filtro não existisse, o resultado seria a alternativa C (todos os projetos, relacionados ou não); com o filtro, vira a alternativa D.

Para visualizar, imagine que PROJETO_PESQUISA tem 5 projetos (P1 a P5) e DESENVOLVIMENTO_TECNOLOGICO referencia apenas P1, P2 e P3. O LEFT JOIN devolve 5 linhas: P1, P2 e P3 com dados preenchidos, e P4 e P5 com NULL na coluna da tabela da direita. O WHERE ... IS NULL corta as três primeiras e entrega exatamente P4 e P5 — os projetos sem nenhum desenvolvimento tecnológico associado.

A pegadinha que a banca explora aqui é a inversão da tabela-base: o candidato que lê o LEFT JOIN e conclui que o resultado são os projetos de DESENVOLVIMENTO_TECNOLOGICO (alternativas A e B) inverte a ordem das tabelas. A tabela que aparece primeiro no FROM é a que tem todas as suas linhas preservadas — é dela que saem os registros do resultado final. Guarde essa fronteira: tabela-base = tabela da esquerda = tabela que não perde linhas; é exatamente nela que as alternativas se dividem.

  1. 1LEFT JOIN preserva esquerda
  2. 2Sem par → NULL à direita
  3. 3WHERE ... IS NULL filtra
  4. 4Sobram órfãos da esquerda
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Inverte a tabela-base: afirma que o resultado são projetos de DESENVOLVIMENTO_TECNOLOGICO sem relação com PROJETO_PESQUISA. No LEFT JOIN, a tabela que tem todas as linhas preservadas é a da esquerda (PROJETO_PESQUISA), não a da direita. Além disso, o filtro IS NULL seleciona justamente as linhas sem correspondência — o oposto do que a alternativa descreve.

Alternativa B — ❌ Incorreta

Também inverte a tabela-base, mas o erro principal é ignorar o filtro WHERE ... IS NULL. Se a consulta fosse apenas LEFT JOIN sem filtro, o resultado incluiria todos os projetos de DESENVOLVIMENTO_TECNOLOGICO (relacionados ou não) — mas o WHERE elimina exatamente as linhas que tiveram correspondência, deixando só as que não se relacionam. A alternativa descreve o comportamento do LEFT JOIN puro, não da consulta completa.

Alternativa C — ❌ Incorreta

Descreve o resultado do LEFT JOIN sem o filtro WHERE ... IS NULL: todos os projetos de pesquisa, estejam ou não relacionados. A consulta, porém, aplica o filtro que remove as linhas com correspondência, então o resultado final é apenas o subconjunto sem relação. A alternativa confunde a junção com o resultado filtrado.

Alternativa D — ✅ Correta ⟵ GABARITO

É exatamente o que a consulta faz: o LEFT JOIN preserva todos os projetos de pesquisa, e o WHERE ... IS NULL na coluna de DESENVOLVIMENTO_TECNOLOGICO seleciona apenas as tuplas sem correspondência. O resultado são os projetos de pesquisa que não estão relacionados a nenhuma tupla da tabela de desenvolvimento tecnológico — o padrão anti-join.

Alternativa E — ❌ Incorreta

Descreve o oposto do filtro: projetos que possuem ocorrências na tabela de desenvolvimento tecnológico. Isso seria obtido com um INNER JOIN ou com WHERE ... IS NOT NULL, não com IS NULL. A alternativa troca a negação do filtro, invertendo completamente o resultado.

NÃO CAIA NESSA!

A banca adora inverter a tabela-base do LEFT JOIN e o sentido do filtro IS NULL. Aqui, três alternativas (A, B e E) exploram exatamente essas duas inversões: A e B trocam a tabela da esquerda pela da direita, e E troca IS NULL por IS NOT NULL. Na prova, sublinhe qual tabela vem primeiro no FROM e qual coluna está no filtro — são os dois elementos que decidem tudo. Com treino, você enxerga essas trocas de longe 💪

PEGA ESSA DICA!

Para identificar o padrão anti-join, procure a combinação LEFT JOIN + WHERE tabela_direita.coluna IS NULL. Esse par é a assinatura de "registros sem correspondência". Se o filtro for IS NOT NULL, o resultado vira o oposto (só os que têm par). Memorize o par: LEFT JOIN + IS NULL = órfãos da esquerda.

Gabarito: letra D

Link permanente: /questoes/fg130050