Questão nº 66
Questão de Tecnologia da Informação · FGV ALEP 2024 (nº 66)
Atenção, o enunciado a seguir refere-se às duas próximas questões.
Considere o esquema relacional a seguir, implementado em SQL.create table recurso ( id integer primary key, nome varchar(20) not null, valor real ); create table projeto ( id integer primary key, nome varchar(20) not null, verba real ); create table alocacao ( id_recurso integer, id_projeto integer, primary key(id_recurso,id_projeto), foreign key(id_recurso) references recurso, foreign key(id_projeto) references projeto );
A saída gerada pela consulta:
select r.nome from recurso r left join alocacao a on a.id_recurso=r.id where a.id_projeto is null
apresenta o nome dos recursos
- Aalocados a nenhum projeto. (alternativa correta)
- Bdesignados a projetos com verba alocada.
- Cdistribuídos à esquerda de projetos.
- Dreservados a projetos com identificação nula.
- Evinculados a projetos sem nomes cadastrados.
Resposta comentada
Gabarito Alternativa A
O LEFT JOIN (junção à esquerda) inclui todos os registros da tabela da esquerda (a primeira listada no FROM), mesmo que não haja correspondência na tabela da direita. Quando não há correspondência, as colunas da tabela da direita aparecem como NULL. A condição WHERE coluna_da_direita IS NULL é usada para filtrar e encontrar exatamente esses registros da tabela da esquerda que não têm correspondência na tabela da direita.
- (A) Correta: A consulta
LEFT JOIN alocacao a on a.id_recurso=r.idgarante que todos os recursos (r) sejam listados. A condiçãoWHERE a.id_projeto IS NULLfiltra para mostrar apenas os recursos para os quais não foi encontrada nenhuma entrada correspondente na tabelaalocacao. Isso significa que esses recursos não estão alocados a nenhum projeto. - (B) Incorreta: A consulta não envolve a tabela
projetodiretamente na condição de filtro (WHERE), nem verifica averba. O foco é na ausência de alocação, não na verba dos projetos. - (C) Incorreta: Esta alternativa usa uma linguagem figurativa que não corresponde ao significado técnico do
LEFT JOINou ao resultado da consulta. "Distribuídos à esquerda" não tem sentido em SQL. - (D) Incorreta: Esta é a pegadinha. A condição
a.id_projeto IS NULLnão significa que existem projetos com identificação nula.id_projetoé uma chave estrangeira que referencia a chave primária da tabelaprojeto, que não pode ser nula. ONULLaqui surge porque oLEFT JOINnão encontrou um registro correspondente na tabelaalocacaopara aquelerecurso, preenchendo as colunas dealocacao(incluindoid_projeto) comNULL. Portanto, significa que o recurso não está alocado, e não que está alocado a um projeto com ID nulo. - (E) Incorreta: A consulta não verifica nomes de projetos, nem sua ausência. O filtro está na existência de uma alocação para o recurso.
Fonte: FGV ALEP 2024 Analista Legislativo - Desenvolvedor de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.