Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — INSTITUTO AOCP 2024

Banco de DadosConsultas e Comandos em SQL
Código
qa630678
Banca
INSTITUTO AOCP
Órgão
MPE PR
Ano
2024
Cargo
Tec TI ( )

Como técnico de tecnologia da informação do Ministério Público do Estado do Paraná, você está realizando uma análise de dados utilizando Structured Query Language (SQL). Seu objetivo é gerar um relatório que inclua os nomes dos funcionários que nasceram em Curitiba e ganham mais de 5000 reais e os dependentes e seus respectivos nomes. Para isso, você deve escrever uma consulta SQL adequada que utilize as tabelas Funcionários e Dependentes.

 

Assinale a alternativa que apresenta corretamente a consulta SQL que você deve realizar para obter essas informações.

  1. ASELECT f.nome AS nome_funcionario, d.nome AS nome_dependente JOIN Funcionários f FROM Dependentes d ON f.id = d.id_funcionario WHERE f.cidade_nascimento = ‘Curitiba’ AND f.salario > 5000 AND d.cidade_nascimento = ‘Curitiba’;
  2. BSELECT f.nome AS nome_funcionario, d.nome AS nome_dependente FROM Funcionários f JOIN Dependentes d ON f.id != d.id_funcionario WHERE f.cidade_nascimento = ‘Curitiba’ AND f.salario > 5000 AND d.cidade_nascimento = ‘Curitiba’;
  3. CSELECT f.nome AS nome_funcionario, d.nome AS nome_dependente FROM Funcionários f JOIN Dependentes d ON f.id = d.id_funcionario WHERE f.cidade_nascimento = ‘Curitiba’ AND f.salario < 5000 AND d.cidade_nascimento != ‘Curitiba’;
  4. DSELECT f.nome AS nome_funcionario, d.nome AS nome_dependente FROM Funcionários f WHERE Dependentes d ON f.id = d.id_funcionario JOIN f.cidade_nascimento = ‘Curitiba’ AND f.salario > 5000 AND d.cidade_nascimento != ‘Curitiba’;
  5. ESELECT f.nome AS nome_funcionario, d.nome AS nome_dependente FROM Funcionários f JOIN Dependentes d ON f.id = d.id_funcionario WHERE f.cidade_nascimento = ‘Curitiba’ AND f.salario > 5000 AND d.cidade_nascimento = ‘Curitiba’;
Revelar gabarito e comentário

GabaritoE — SELECT f.nome AS nome_funcionario, d.nome AS nome_dependente FROM Funcionários f JOIN Dependentes d ON f.id = d.id_funcionario WHERE f.cidade_nascimento = ‘Curitiba’ AND f.salario > 5000 AND d.cidade_nascimento = ‘Curitiba’;

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 com JOIN: combinando tabelas Funcionários e Dependentes

Gabarito: letra E. A consulta correta deve selecionar os nomes dos funcionários e dependentes, unir as tabelas pela chave estrangeira (f.id = d.id_funcionario) e filtrar pelos critérios do enunciado: funcionário nascido em Curitiba, com salário maior que 5000, e dependente também nascido em Curitiba. A alternativa E é a única que combina corretamente a sintaxe do JOIN com as condições de filtro exigidas.

O comando SELECT é a base de qualquer consulta em SQL, e sua função é recuperar dados de uma ou mais tabelas. Quando precisamos combinar informações de tabelas diferentes — aqui, Funcionários e Dependentes — utilizamos a cláusula JOIN. O JOIN relaciona as linhas das duas tabelas com base em uma condição de igualdade entre colunas, geralmente uma chave primária de uma tabela e uma chave estrangeira da outra. No nosso caso, a tabela Dependentes possui a coluna id_funcionario, que referencia a coluna id da tabela Funcionários. A condição do JOIN deve ser f.id = d.id_funcionario, garantindo que cada dependente seja associado ao seu respectivo funcionário.

A cláusula WHERE é responsável por filtrar os registros que atendem a determinadas condições. O enunciado pede funcionários que nasceram em Curitiba (f.cidade_nascimento = 'Curitiba') e ganham mais de 5000 reais (f.salario > 5000). Além disso, o relatório deve incluir os dependentes e seus respectivos nomes, mas a redação do enunciado pode gerar dúvida: "os dependentes e seus respectivos nomes" — a interpretação correta, considerando o gabarito, é que também se deseja apenas os dependentes que nasceram em Curitiba (d.cidade_nascimento = 'Curitiba'). Essa é a leitura que a banca adota, e é o que diferencia a alternativa E das demais.

A sintaxe correta de um JOIN exige que a cláusula FROM venha primeiro, seguida do JOIN com a condição ON. A ordem das cláusulas é fixa: SELECTFROMJOINONWHERE. Qualquer inversão ou erro de sintaxe torna a consulta inválida. Vamos analisar cada alternativa para identificar os erros específicos.

Critério

Alternativa E (correta)

Alternativas A–D (incorretas)

Ordem das cláusulas

SELECTFROMJOINONWHERE

A: JOIN antes do FROM; D: WHERE usado para JOIN

Condição do JOIN

f.id = d.id_funcionario (igualdade)

B: f.id != d.id_funcionario (≠)

Filtro de salário

f.salario > 5000 (maior que)

C: f.salario < 5000 (menor que)

Filtro de cidade do funcionário

f.cidade_nascimento = 'Curitiba'

C: d.cidade_nascimento != 'Curitiba' (inverte)

Filtro de cidade do dependente

d.cidade_nascimento = 'Curitiba'

C: d.cidade_nascimento != 'Curitiba' (inverte)

Alternativa A — ❌ Incorreta

O erro está na ordem das cláusulas: o JOIN aparece antes do FROM. A sintaxe correta exige que o FROM venha primeiro, seguido do JOIN. Além disso, a condição ON está posicionada de forma incorreta, separada do JOIN. A consulta como escrita não é válida em SQL.

Alternativa B — ❌ Incorreta

O erro está na condição do JOIN: f.id != d.id_funcionario. O operador != (diferente) faz com que a consulta retorne combinações de funcionários e dependentes que não estão relacionados, o que é semanticamente incorreto. O objetivo é unir as tabelas pela chave estrangeira, ou seja, f.id = d.id_funcionario.

Alternativa C — ❌ Incorreta

O erro está nas condições do WHERE: f.salario < 5000 e d.cidade_nascimento != 'Curitiba'. O enunciado pede funcionários que ganham mais de 5000 reais (f.salario > 5000) e dependentes que nasceram em Curitiba (d.cidade_nascimento = 'Curitiba'). A alternativa inverte os operadores de comparação, resultando em um relatório com dados opostos ao solicitado.

Alternativa D — ❌ Incorreta

O erro está na sintaxe: a cláusula WHERE está sendo usada para especificar o JOIN (WHERE Dependentes d ON f.id = d.id_funcionario), o que é inválido. O JOIN deve ser declarado após o FROM, com a condição ON logo em seguida. Além disso, a condição JOIN f.cidade_nascimento = 'Curitiba' não faz sentido, pois JOIN não é usado para filtrar dados.

Alternativa E — ✅ Correta ⟵ GABARITO

A consulta está correta: seleciona os nomes dos funcionários e dependentes, une as tabelas pela chave estrangeira (f.id = d.id_funcionario) e filtra pelos critérios do enunciado: funcionário nascido em Curitiba (f.cidade_nascimento = 'Curitiba'), com salário maior que 5000 (f.salario > 5000) e dependente também nascido em Curitiba (d.cidade_nascimento = 'Curitiba'). A sintaxe segue a ordem correta das cláusulas: SELECT, FROM, JOIN, ON e WHERE.

NÃO CAIA NESSA!

A banca explora a inversão da ordem das cláusulas (JOIN antes do FROM) e a troca dos operadores de comparação (> por <, = por !=). Além disso, a condição sobre a cidade de nascimento do dependente (d.cidade_nascimento = 'Curitiba') é um ponto sutil: o enunciado menciona "os dependentes e seus respectivos nomes", o que pode levar o candidato a pensar que não há filtro para os dependentes. No entanto, o gabarito considera que o filtro de Curitiba se aplica também aos dependentes. Fique atento a esses detalhes na hora da prova.

PEGA ESSA DICA!

Para questões de SQL com JOIN, verifique sempre: (1) a ordem das cláusulas (SELECTFROMJOINONWHERE); (2) a condição do JOIN (deve usar = para relacionar as chaves); (3) os operadores de comparação no WHERE (maior que, menor que, igual, diferente). Se a alternativa tiver qualquer erro de sintaxe ou lógica, elimine-a imediatamente.

Gabarito: letra E

Link permanente: /questoes/qa630678