Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024
Banco de Dados›Consultas e Comandos em SQL
Código
ce403669
Banca
CESPE / CEBRASPE
Órgão
TSE
Ano
2024
Cargo
TJ
No modelo a seguir, idProcesso da tabela Processo e IdOrgao da tabela Orgao são chaves primárias, NN corresponde a not null e FK, a foreign key.
Com base no modelo e nas informações precedentes, julgue o item subsecutivo.
Considere que as tabelas e o relacionamento entre elas tenham sido corretamente criados, conforme o modelo apresentado, e que os seguintes comandos tenham sido executados com sucesso.
INSERT INTO Orgao VALUES (1,'TRE-SC'); INSERT INTO Orgao VALUES (2,'TRE-PR'); INSERT INTO Processo VALUES (1,'111', 1); INSERT INTO Processo VALUES (2,'222', NULL);
Nesse caso, a execução do comando a seguir apresentará 2 como resultado.
SELECT count(orgao.IdOrgao) FROM Processo right JOIN Orgao ON processo.idorgao = orgao.idorgao;
CCerto
EErrado
Revelar gabarito e comentário▾
GabaritoC — Certo
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”.
SQL – RIGHT JOIN e a função COUNT
Gabarito: Certo. A consulta SELECT count(orgao.IdOrgao) FROM Processo RIGHT JOIN Orgao ON processo.idorgao = orgao.idorgao; retornará 2, pois o RIGHT JOIN preserva todas as linhas da tabela à direita (Orgao), que possui 2 registros, e a função COUNT(orgao.IdOrgao) conta apenas os valores não nulos dessa coluna, que são exatamente 2.
O RIGHT JOIN (ou RIGHT OUTER JOIN) é um tipo de junção externa que retorna todas as linhas da tabela à direita (a segunda tabela mencionada no JOIN), mesmo que não haja correspondência na tabela à esquerda. Quando não há correspondência, as colunas da tabela à esquerda são preenchidas com NULL. Nesta questão, a tabela Orgao tem 2 registros (1, 'TRE-SC' e 2, 'TRE-PR'), e a tabela Processo tem 2 registros (1, '111', 1 e 2, '222', NULL).
Vamos analisar o resultado do RIGHT JOIN:
O registro (1, 'TRE-SC') da tabela Orgao encontra correspondência com o processo (1, '111', 1), pois processo.idorgao = 1 = orgao.idorgao. A linha resultante terá orgao.IdOrgao = 1.
O registro (2, 'TRE-PR') da tabela Orgaonão encontra correspondência, pois nenhum processo tem idorgao = 2. A linha resultante terá orgao.IdOrgao = 2 e as colunas de Processo como NULL.
Portanto, o resultado do RIGHT JOIN terá 2 linhas, ambas com orgao.IdOrgao não nulo (1 e 2). A função COUNT(orgao.IdOrgao) conta apenas os valores não nulos, resultando em 2.
NÃO CAIA NESSA!
A banca pode tentar confundir o candidato fazendo-o pensar que o COUNT contaria todas as linhas do resultado, incluindo as que têm NULL. Mas COUNT(coluna) ignora valores NULL, enquanto COUNT(*) conta todas as linhas. Aqui, como todas as linhas do RIGHT JOIN têm orgao.IdOrgao não nulo, o resultado é 2.
PEGA ESSA DICA!
Para resolver questões de JOIN com COUNT, identifique primeiro qual tabela é preservada (a da direita no RIGHT JOIN, a da esquerda no LEFT JOIN). Depois, verifique se a coluna contada pode ter NULL. Se a coluna for a chave primária da tabela preservada, ela nunca será NULL.
Alternativa C — ✅ Certa ⟵ GABARITO
A afirmação está correta. O RIGHT JOIN preserva todas as linhas da tabela Orgao (2 registros). A função COUNT(orgao.IdOrgao) conta os valores não nulos dessa coluna. Como IdOrgao é chave primária de Orgao, nunca é NULL, então conta as 2 linhas. O resultado é 2.
Alternativa E — ❌ Errada
A afirmação está errada porque o resultado da consulta é 2, não outro valor. O RIGHT JOIN garante que todas as linhas de Orgao apareçam, e COUNT(orgao.IdOrgao) conta os valores não nulos, que são 2. Quem marcou esta alternativa provavelmente confundiu o RIGHT JOIN com um INNER JOIN, que descartaria a linha sem correspondência, resultando em 1.