Pular para o conteúdo principal

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

Banco de DadosGeral
Código
fg157161
Banca
FGV
Órgão
AMAZUL
Ano
2026
Cargo
TDTND

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

 

CREATE TABLE PROJETO_PESQUISA
 (
    ID_PROJETO          INTEGER         PRIMARY KEY,
    COD_PROJETO         VARCHAR(30)     UNIQUE,
    TITULO              VARCHAR(200)    NOT NULL,
    AREA_TEMATICA       VARCHAR(100),
    OBJETIVO_GERAL      VARCHAR(1000),
    DATA_INICIO         DATE            NOT NULL,
    DATA_FIM_PREVISTA   DATE,
    STATUS_PROJETO      VARCHAR(30)     NOT NULL
);

 

CREATE TABLE DESENVOLVIMENTO_TECNOLOGICO (
    ID_DESENVOLVIMENTO      INTEGER         PRIMARY KEY,
    ID_PROJETO              INTEGER,
    NOME_RESULTADO          VARCHAR(200)    NOT NULL,
    TIPO_RESULTADO          VARCHAR(50)     NOT NULL,
    NIVEL_MATURIDADE_TEC    INTEGER,
    DATA_INICIO             DATE,
    DATA_CONCLUSAO          DATE,
    SITUACAO                VARCHAR(30),

    CONSTRAINT FK_DESENVOLVIMENTO_PROJETO 
        FOREIGN KEY (ID_PROJETO) 
        REFERENCES PROJETO_PESQUISA (ID_PROJETO)
);

 

Se considerarmos que um script de inserção de dados nas duas tabelas acima seja bem-sucedido, na qual 10 linhas sejam inseridas na tabela PROJETO_PESQUISA e 24 linhas na tabela DESENVOLVIMENTO_TECNOLOGICO.


Na referida inserção, considere que apenas uma tupla da tabela PROJETO_PESQUISA não está associada a alguma tupla da tabela DESENVOLVIMENTO_TECNOLOGICO, e que duas tuplas da tabela DESENVOLVIMENTO_TECNOLOGICO não estão associadas à tabela PROJETO_PESQUISA.

 

Dado o cenário apresentado, assinale a opção que corretamente indica o resultado da execução da consulta a seguir:

 

SELECT count(*) FROM PROJETO_PESQUISA

WHERE EXISTS

 (SELECT * FROM DESENVOLVIMENTO_TECNOLOGICO);

  1. A1
  2. B10
  3. C22
  4. D24
  5. E25
Revelar gabarito e comentário

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

Resolução

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

A ideia por trás

O comando EXISTS é um operador lógico do SQL que testa se uma subconsulta retorna pelo menos uma linha. Ele não compara valores nem verifica relacionamentos entre tabelas: apenas pergunta 'existe alguma linha neste resultado?'. Se a resposta for sim, o teste é verdadeiro; se não, é falso.

A subconsulta dentro do EXISTS pode ser correlacionada ou não. Quando ela não referencia a tabela externa (como aqui, que é apenas SELECT * FROM DESENVOLVIMENTO_TECNOLOGICO), ela é executada uma vez para cada linha da tabela externa, mas sempre retorna o mesmo resultado — todas as linhas da tabela interna. Como a tabela interna tem 24 linhas, o EXISTS é verdadeiro para todas as linhas da tabela externa, independentemente de qualquer associação.

Esta questão testa exatamente esse comportamento: a subconsulta não é correlacionada, então o EXISTS é verdadeiro para todas as 10 linhas de PROJETO_PESQUISA. O resultado do COUNT(*) é o total de linhas da tabela externa, ignorando completamente as informações sobre associações.

O que a questão dá

  • tabela PROJETO_PESQUISA com 10 linhas

  • tabela DESENVOLVIMENTO_TECNOLOGICO com 24 linhas

  • 1 projeto sem desenvolvimento associado

  • 2 desenvolvimentos sem projeto associado

O que queremos: o resultado da consulta SELECT count(*) FROM PROJETO_PESQUISA WHERE EXISTS (SELECT * FROM DESENVOLVIMENTO_TECNOLOGICO)

Passo 1 — Analisar a subconsulta

O EXISTS testa se a subconsulta retorna alguma linha. Para saber o resultado, precisamos ver o que a subconsulta retorna. Ela é SELECT * FROM DESENVOLVIMENTO_TECNOLOGICO, sem cláusula WHERE e sem referência à tabela externa. Isso significa que ela não é correlacionada: para cada linha de PROJETO_PESQUISA, ela retorna todas as 24 linhas de DESENVOLVIMENTO_TECNOLOGICO.

NÃO CAIA NESSA!

Pensar que a subconsulta retorna apenas as linhas associadas ao projeto atual. Como não há correlação, ela retorna todas as 24 linhas sempre.

Passo 2 — Aplicar o EXISTS a cada linha

Com a subconsulta entendida, aplicamos o teste a cada linha da tabela externa. Para cada uma das 10 linhas de PROJETO_PESQUISA, a subconsulta retorna 24 linhas. Como 24 é maior que zero, o EXISTS é verdadeiro para todas as 10 linhas.

NÃO CAIA NESSA!

Tentar subtrair as linhas sem associação (10 - 1 = 9) ou fazer outras contas com os dados de associação. Eles são irrelevantes aqui.

Passo 3 — Contar as linhas que passaram no teste

O COUNT(*) conta quantas linhas da tabela externa satisfazem a condição do WHERE. Como todas as 10 linhas têm EXISTS verdadeiro, o resultado é 10.

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

Confundir com o número de linhas da subconsulta (24) ou com o total de linhas das duas tabelas (34).

Resposta: 10 — alternativa B

Link permanente: /questoes/fg157161