Um agente fazendário de TI da referida secretaria deseja obter, em álgebra relacional, o nome e o valor devido de todos os contribuintes que possuem lançamentos fiscais referentes ao tributo denominado ICMS. Para tal fim, serão utilizadas as operações de seleção (σ), projeção (π) e junção (\bowtie). Sabe-se que a aplicação precoce de seleções é uma forma de otimização da consulta.
A partir das informações da situação precedente e considerando que a ordem de execução das operações está indicada explicitamente pelos parênteses, assinale a opção que representa corretamente a expressão, em álgebra relacional, cujo resultado será o desejado pelo agente fazendário.
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”.
Álgebra Relacional: Seleção, Projeção e Junção
Gabarito: letra E. A expressão correta aplica a seleção (σ) diretamente sobre a relação TRIBUTO, filtrando apenas os tributos com NomeTributo = 'ICMS', antes de realizar as junções (⋈) com LANCAMENTO_FISCAL e CONTRIBUINTE, e por fim projeta (π) os atributos Nome_RazaoSocial e ValorDevido. Essa ordem respeita o princípio de otimização mencionado no enunciado: aplicar seleções o mais cedo possível reduz o número de tuplas processadas nas junções.
A álgebra relacional é uma linguagem formal de consulta que opera sobre relações (tabelas), fornecendo um conjunto de operações para manipular os dados. As operações básicas são: seleção (σ), que filtra linhas (tuplas) de uma relação com base em uma condição; projeção (π), que seleciona colunas (atributos) específicas, eliminando duplicatas; e junção (⋈), que combina tuplas de duas relações com base em uma condição de correspondência entre seus atributos. A junção natural, em particular, combina tuplas que possuem valores iguais nos atributos com o mesmo nome, eliminando a coluna duplicada no resultado.
O objetivo da consulta é obter o nome e o valor devido de todos os contribuintes que possuem lançamentos fiscais referentes ao tributo ICMS. Para isso, é necessário combinar as três relações: CONTRIBUINTE, LANCAMENTO_FISCAL e TRIBUTO. A relação LANCAMENTO_FISCAL possui as chaves estrangeiras CPF_CNPJ (referenciando CONTRIBUINTE) e CodigoTributo (referenciando TRIBUTO), o que permite realizar as junções. A condição de filtro é NomeTributo = 'ICMS', que está na relação TRIBUTO.
A otimização da consulta é um aspecto crucial. O enunciado afirma que "a aplicação precoce de seleções é uma forma de otimização da consulta". Isso significa que, idealmente, a seleção deve ser aplicada o mais cedo possível na expressão, ou seja, diretamente sobre a relação que contém o atributo usado na condição (TRIBUTO), antes de realizar as junções. Isso reduz o tamanho das relações intermediárias, tornando a execução mais eficiente. A alternativa E segue exatamente essa estratégia: primeiro seleciona os tributos ICMS, depois junta com os lançamentos e contribuintes, e por fim projeta os atributos desejados.
A pegadinha desta questão está na ordem das operações. As alternativas A, B, C e D aplicam a seleção em um momento inadequado, seja após as junções (o que é funcionalmente correto, mas não otimizado), seja antes da junção com a relação errada, ou ainda projetam os atributos antes de aplicar a seleção, o que pode eliminar o atributo NomeTributo necessário para o filtro. A alternativa E é a única que aplica a seleção diretamente sobre TRIBUTO, antes de qualquer junção, e depois projeta os atributos finais. Guarde a regra de ouro: selecione cedo, projete tarde — é exatamente isso que separa a alternativa correta das demais.
1Selecione cedo (σ)
2Junte as relações (⋈)
3Projete tarde (π)
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Esta alternativa aplica a seleção sobre o resultado da junção entre as três relações. Embora o resultado final seja correto, a seleção é aplicada após as junções, o que contraria o princípio de otimização mencionado no enunciado. A ordem das operações, indicada pelos parênteses, mostra que a seleção é a operação mais externa, ou seja, a última a ser executada. Isso significa que todas as tuplas das três relações serão combinadas antes de filtrar apenas os tributos ICMS, resultando em um processamento desnecessariamente custoso.
Alternativa B — ❌ Incorreta
Esta alternativa projeta os atributos Nome_RazaoSocial e ValorDevido antes de aplicar a seleção. O problema é que a projeção elimina o atributo NomeTributo da relação resultante, tornando impossível aplicar a seleção NomeTributo = 'ICMS' posteriormente. A expressão é logicamente inválida, pois a seleção referencia um atributo que não existe mais no resultado da projeção.
Alternativa C — ❌ Incorreta
Esta alternativa é idêntica à alternativa B, apresentando o mesmo erro: a projeção é aplicada antes da seleção, eliminando o atributo NomeTributo necessário para o filtro. A expressão é logicamente inválida pelos mesmos motivos.
Alternativa D — ❌ Incorreta
Esta alternativa aplica a seleção diretamente sobre a relação TRIBUTO, o que é correto do ponto de vista da otimização. No entanto, a ordem das junções está incorreta: a junção é feita primeiro entre o resultado da seleção (TRIBUTO filtrado) e LANCAMENTO_FISCAL, e depois com CONTRIBUINTE. Embora a ordem das junções não afete o resultado final em termos de conjunto de tuplas, a expressão não está otimizada da mesma forma que a alternativa E. A diferença crucial é que, na alternativa E, a junção entre CONTRIBUINTE e LANCAMENTO_FISCAL é feita primeiro, e depois com o TRIBUTO filtrado. Ambas as ordens são funcionalmente corretas, mas a alternativa E é a que melhor reflete a estratégia de aplicar a seleção o mais cedo possível, antes de qualquer junção, e é a que a banca considera correta.
Alternativa E — ✅ Correta ⟵ GABARITO
Esta alternativa aplica a seleção diretamente sobre a relação TRIBUTO, filtrando apenas os tributos com NomeTributo = 'ICMS', antes de realizar qualquer junção. Isso reduz o tamanho da relação TRIBUTO para apenas uma tupla (a do ICMS), otimizando as junções subsequentes. Em seguida, realiza a junção entre CONTRIBUINTE e LANCAMENTO_FISCAL, e depois com o resultado da seleção sobre TRIBUTO. Por fim, projeta os atributos Nome_RazaoSocial e ValorDevido, que são exatamente os campos desejados pelo agente fazendário. A ordem das operações respeita o princípio de otimização e produz o resultado correto.