Considere a seguinte sequência de comandos SQL:insert into tb_cliente(id_cliente, num_cpf, nome)values(1,'111','cli1'),(2,'222','cli2'),(3,'333','cli3'),(4,'444','cli4'),(5,'555','cli5');update tb_cliente set estado='RJ'where id_cliente%2!=0;create view v_clientes_rj asselect id_cliente, num_cpf, nome, estadofrom tb_cliente where estado = 'RJ';Após a execução dos três comandos SQL apresentados, o seguinte comando foi executado:insert into v_clientes_rjvalues (6,'cli6','6666','MG');Por fim, a seguinte consulta foi executada:select count(*) from v_clientes_rj;O retorno da última consulta executada será
Ao valor 3, dado que a visão permanece selecionando tuplas de clientes do estado ‘RJ’.
Bo valor 4, já que a execução do último comando de inserção alterou o estado da visão.
Co valor 6, por esse ser o novo número de tuplas da tabela de base da visão.
Dum erro, pois visões não aceitam inserções diretamente.
Euma tabela vazia, pois a última inserção desconfigura a condição-alvo da visão.
Revelar gabarito e comentário▾
GabaritoA — o valor 3, dado que a visão permanece selecionando tuplas de clientes do estado ‘RJ’.
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”.
Visões (Views) em SQL: Inserção e Filtragem
Gabarito: letra A. Após a inserção na visão v_clientes_rj de uma linha com estado 'MG', a linha é adicionada à tabela base, mas não aparece na visão, pois esta filtra apenas linhas com estado = 'RJ'. Portanto, o count(*) retorna 3, mantendo as três linhas originais (IDs 1, 3 e 5) que atendem à condição.
O comando CREATE VIEW define uma visão como uma consulta armazenada. Quando se insere em uma visão simples (baseada em uma única tabela, sem junções, agregações ou WITH CHECK OPTION), o comando é traduzido para um INSERT na tabela base. A linha inserida é adicionada à tabela, mas se não atender à condição WHERE da visão, ela simplesmente não aparece quando a visão é consultada.
NÃO CAIA NESSA!
Muitos candidatos pensam que a inserção em uma visão é automaticamente visível na visão, ou que a visão seria alterada para incluir a nova linha mesmo com estado diferente. Na verdade, sem WITH CHECK OPTION, o SGBD insere a linha na tabela base, mas a visão filtra-a, mantendo seu resultado inalterado. A pegada está em entender que a visão não é uma tabela separada, mas sim uma "janela" sobre os dados.
Comando / Situação
Efeito na Tabela Base tb_cliente
Efeito na Visão v_clientes_rj
Resultado de SELECT count(*) FROM v_clientes_rj
INSERT inicial (5 linhas)
5 linhas inseridas (IDs 1 a 5)
Visão ainda não existe
—
UPDATE ... SET estado='RJ' WHERE id_cliente%2!=0
IDs 1, 3, 5 atualizados para 'RJ'; IDs 2, 4 permanecem com estado nulo
Visão ainda não existe
—
CREATE VIEW v_clientes_rj AS ... WHERE estado = 'RJ'
Tabela base inalterada (5 linhas)
Visão contém as 3 linhas com estado 'RJ' (IDs 1, 3, 5)
3
INSERT INTO v_clientes_rj VALUES (6,'cli6','6666','MG')
Linha com ID 6 e estado 'MG' adicionada à tabela base (total: 6 linhas)
Visão não inclui a nova linha, pois estado = 'MG' não atende ao filtro WHERE estado = 'RJ'
3 (inalterado)
1Cria tabela basetb_cliente
2UPDATE estado='RJ'IDs ímpares
3CREATE VIEW v_clientes_rjWHERE estado='RJ'
4INSERT na visãoestado='MG'
5SELECT count(*)Resultado: 3
LEVEL · soulevel.com.br
Alternativa A — ✅ Correta ⟵ GABARITO
A visão v_clientes_rj seleciona apenas linhas com estado = 'RJ'. Após o INSERT de uma linha com estado 'MG', essa linha não entra na visão, que continua com as três tuplas originais (IDs 1,3,5). Portanto, count(*) retorna 3.
Alternativa B — ❌ Incorreta
A inserção não altera o estado da visão; ela acrescenta uma linha à tabela base, mas a visão permanece com o mesmo WHERE. O valor 4 seria o número de linhas se a nova linha também tivesse estado 'RJ', o que não ocorre.
Alternativa C — ❌ Incorreta
O count é sobre a visão, não sobre a tabela base. A tabela base passa a ter 6 linhas, mas a visão exibe apenas as que satisfazem estado = 'RJ', ou seja, 3.
Alternativa D — ❌ Incorreta
Visões simples (que não envolvem junções, agregações ou WITH CHECK OPTION) aceitam inserções diretamente, desde que a visão seja atualizável. O comando executado é válido e insere a linha na tabela base, sem erro.
Alternativa E — ❌ Incorreta
A condição da visão não é "desconfigurada" pela inserção; ela permanece inalterada. A nova linha, por ter estado 'MG', simplesmente não é selecionada pela visão, que continua contendo as linhas com 'RJ'.