Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FCC 2025

Banco de DadosConsultas e Comandos em SQL
Código
fc150340
Banca
FCC
Órgão
Pref SP
Ano
2025
Cargo
AMCI (CGM SP)
Um Auditor de uma Prefeitura está analisando o banco de dados do sistema responsável por gerenciar pagamentos realizados aos fornecedores. O sistema utiliza o modelo de dados relacional e apresenta a seguinte estrutura:   O Auditor deseja listar todos os pagamentos realizados, exibindo o NomeFornecedor, o CNPJ e o Valor Pagamento. É necessário relacionar as tabelas Pagamentos e Fornecedores, com base no modelo de dados relacional, para obter as informações corretamente.   A consulta SQL correta para essa auditoria éImagem associada para resolução da questão
  1. ASELECT p . NomeFornecedor, f .CNPJ, p . Valor Pagamento FROM Pagamentos p JOIN Fornecedores f ON p . IDFornecedor = f . IDPagamento;
  2. BSELECT f . NomeFornecedor , f . CNPJ, p . Valor Pagamento FROM Pagamentos p FULL JOIN Fornecedores f ;
  3. CSELECT f . NomeFornecedor, f .CNPJ, p .Valor Pagamento FROM Pagamentos p INNER JOIN Fornecedores f ON p . IDFornecedor = f . IDFornecedor;
  4. DSELECT NomeFornecedor, CNPJ, Valor Pagamento FROM Pagamentos , Fornecedores ;
  5. ESELECT f . NomeFornecedor, f . CNPJ , p .Valor Pagamento FROM Pagamentos p LEFT JOIN Fornecedores f ON p .IDPagamento = f . IDFornecedor;
Revelar gabarito e comentário

GabaritoC — SELECT f . NomeFornecedor, f .CNPJ, p .Valor Pagamento FROM Pagamentos p INNER JOIN Fornecedores f ON p . IDFornecedor = f . IDFornecedor;

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

Consultas SQL: junção de tabelas com INNER JOIN

Gabarito: letra C. Para listar pagamentos com o nome do fornecedor, o CNPJ e o valor, é preciso relacionar as tabelas Pagamentos e Fornecedores pela chave estrangeira IDFornecedor — e a única alternativa que faz isso corretamente é a que usa INNER JOIN ... ON p.IDFornecedor = f.IDFornecedor, selecionando NomeFornecedor e CNPJ da tabela Fornecedores (f) e ValorPagamento da tabela Pagamentos (p).

A consulta SQL é a ferramenta central de um auditor para cruzar dados de tabelas relacionadas. Quando as informações desejadas estão distribuídas em mais de uma tabela, é necessário usar uma junção (JOIN) para combinar as linhas com base em uma condição de igualdade entre colunas — normalmente a chave primária de uma tabela e a chave estrangeira correspondente na outra. No modelo relacional, a chave estrangeira (IDFornecedor em Pagamentos) referencia a chave primária (IDFornecedor em Fornecedores), e é essa correspondência que permite associar cada pagamento ao seu fornecedor.

O comando INNER JOIN retorna apenas as linhas que possuem correspondência nas duas tabelas — ou seja, pagamentos cujo IDFornecedor exista na tabela Fornecedores. É exatamente o que o auditor precisa: listar todos os pagamentos realizados, exibindo o nome do fornecedor, o CNPJ e o valor. A sintaxe correta exige a cláusula ON com a condição de junção, e a seleção das colunas deve usar os aliases (apelidos) das tabelas para evitar ambiguidade — f.NomeFornecedor, f.CNPJ e p.ValorPagamento.

A banca explora aqui três armadilhas clássicas: (1) trocar a coluna de junção — usar IDPagamento no lugar de IDFornecedor, o que não relaciona as tabelas corretamente; (2) omitir a condição de junção — fazer um FULL JOIN ou um produto cartesiano sem ON, gerando combinações indevidas; e (3) confundir os aliases — buscar NomeFornecedor na tabela errada. A alternativa correta é a única que acerta a coluna de junção, o tipo de junção e a origem de cada coluna.

Guarde o critério decisivo: a junção deve usar a chave estrangeira da tabela Pagamentos (IDFornecedor) igual à chave primária da tabela Fornecedores (IDFornecedor) — é exatamente nessa comparação que as alternativas se dividem.

Critério

Alternativa C (correta)

Alternativas A, B, D, E (incorretas)

Condição de junção (ON)

p.IDFornecedor = f.IDFornecedor (chave estrangeira = chave primária)

A: p.IDFornecedor = f.IDPagamento (coluna inexistente); E: p.IDPagamento = f.IDFornecedor (coluna trocada)

Tipo de junção

INNER JOIN (só linhas com correspondência)

B: FULL JOIN sem ON (inválido); D: produto cartesiano sem ON; E: LEFT JOIN (incluiria pagamentos sem fornecedor)

Origem das colunas no SELECT

f.NomeFornecedor, f.CNPJ, p.ValorPagamento (aliases corretos)

A: p.NomeFornecedor (coluna na tabela errada); D: colunas sem qualificação (ambiguidade)

Resultado esperado

Apenas pagamentos com fornecedor válido, com dados corretos

Combinações indevidas, erros de sintaxe ou dados incorretos

Alternativa A — ❌ Incorreta

O erro está na condição de junção: ON p.IDFornecedor = f.IDPagamento. A coluna IDPagamento não existe na tabela Fornecedores — a chave de ligação é IDFornecedor nas duas tabelas. Além disso, a consulta seleciona p.NomeFornecedor, mas essa coluna pertence à tabela Fornecedores, não a Pagamentos. A banca troca a coluna de junção e a origem do campo NomeFornecedor.

Alternativa B — ❌ Incorreta

A consulta usa FULL JOIN sem a cláusula ON, o que é inválido na sintaxe SQL — todo JOIN exige uma condição de junção. Além disso, o FULL JOIN retornaria todas as linhas de ambas as tabelas, inclusive aquelas sem correspondência, o que não atende ao requisito de listar apenas pagamentos com fornecedor. A banca omite a condição de junção e usa um tipo de junção inadequado.

Alternativa C — ✅ Correta ⟵ GABARITO

A consulta está correta: SELECT f.NomeFornecedor, f.CNPJ, p.ValorPagamento FROM Pagamentos p INNER JOIN Fornecedores f ON p.IDFornecedor = f.IDFornecedor. O INNER JOIN combina as tabelas pela chave estrangeira IDFornecedor, retornando apenas os pagamentos que possuem fornecedor correspondente. As colunas são selecionadas com os aliases corretos: NomeFornecedor e CNPJ vêm de Fornecedores (f), e ValorPagamento vem de Pagamentos (p).

Alternativa D — ❌ Incorreta

A consulta SELECT NomeFornecedor, CNPJ, ValorPagamento FROM Pagamentos, Fornecedores é um produto cartesiano — combina cada linha de Pagamentos com cada linha de Fornecedores, sem nenhuma condição de junção. Isso geraria um resultado gigantesco e incorreto, com combinações indevidas de pagamentos e fornecedores. Além disso, as colunas NomeFornecedor e CNPJ não são qualificadas com o alias da tabela, o que pode gerar ambiguidade.

Alternativa E — ❌ Incorreta

A condição de junção está invertida: ON p.IDPagamento = f.IDFornecedor. A coluna IDPagamento é a chave primária da tabela Pagamentos, mas não é a chave estrangeira que referencia Fornecedores — essa é IDFornecedor. A banca troca a coluna de junção, fazendo a consulta relacionar pagamentos a fornecedores de forma incorreta. Além disso, o LEFT JOIN retornaria todos os pagamentos, mesmo sem fornecedor correspondente, o que não é o objetivo.

NÃO CAIA NESSA!

A banca adora trocar a coluna de junção — em vez de p.IDFornecedor = f.IDFornecedor, usa p.IDPagamento = f.IDFornecedor ou p.IDFornecedor = f.IDPagamento. Fique atento: a chave estrangeira de Pagamentos é IDFornecedor, e ela deve ser igual à chave primária de Fornecedores, que também é IDFornecedor. Com treino, você identifica essa troca de longe 💪.

PEGA ESSA DICA!

Na hora da prova, verifique sempre três coisas em uma consulta com JOIN: (1) a condição do ON usa a chave estrangeira correta? (2) o tipo de junção (INNER, LEFT, RIGHT, FULL) é adequado ao que se pede? (3) as colunas do SELECT estão qualificadas com o alias da tabela certa? Se qualquer uma falhar, a alternativa está errada.

Gabarito: letra C

Link permanente: /questoes/fc150340