Questão de Banco de Dados — Consultas e Comandos em SQL — FCC 2025
Banco de Dados›Consultas 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 é
ASELECT p . NomeFornecedor, f .CNPJ, p . Valor Pagamento FROM Pagamentos p JOIN Fornecedores f ON p . IDFornecedor = f . IDPagamento;
BSELECT f . NomeFornecedor , f . CNPJ, p . Valor Pagamento FROM Pagamentos p FULL JOIN Fornecedores f ;
CSELECT f . NomeFornecedor, f .CNPJ, p .Valor Pagamento FROM Pagamentos p INNER JOIN Fornecedores f ON p . IDFornecedor = f . IDFornecedor;
DSELECT NomeFornecedor, CNPJ, Valor Pagamento FROM Pagamentos , Fornecedores ;
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.
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.