Quem começa a trabalhar com banco de dados logo percebe que algumas consultas se repetem o tempo todo: o mesmo JOIN entre três tabelas, o mesmo filtro, as mesmas colunas renomeadas. Copiar e colar esse SQL em todo lugar funciona por um tempo, mas vira dor de cabeça quando a regra muda. É exatamente para isso que existem as views. Neste artigo você vai entender o que é uma view, como criá-la, quais são suas vantagens e limitações e em que situações ela realmente ajuda.
O que é uma view
Uma view (em português, às vezes chamada de “visão”) é uma consulta SQL salva no banco com um nome. Depois de criada, ela pode ser usada como se fosse uma tabela: você faz SELECT nela, aplica WHERE, ORDER BY e até junta com outras tabelas.
A diferença é que, na forma mais comum, a view não guarda dados próprios. Ela guarda apenas a definição da consulta. Toda vez que alguém consulta a view, o banco executa por baixo a consulta original e devolve o resultado atualizado. Por isso se diz que a view é uma “tabela virtual”.
Como criar uma view: sintaxe básica
Imagine um sistema de loja com as tabelas clientes e pedidos. Toda hora alguém precisa ver os pedidos junto com o nome e a cidade do cliente. Em vez de repetir o JOIN, criamos uma view:
CREATE VIEW vw_pedidos_clientes AS
SELECT p.id AS pedido_id,
p.data_pedido,
p.valor_total,
c.nome AS cliente,
c.cidade
FROM pedidos p
INNER JOIN clientes c ON c.id = p.cliente_id;
A partir daí, a consulta fica bem mais simples:
SELECT cliente, valor_total
FROM vw_pedidos_clientes
WHERE cidade = 'Recife'
ORDER BY valor_total DESC;
Repare que quem usa a view nem precisa saber que existem duas tabelas por trás. Para alterar a definição, muitos bancos aceitam CREATE OR REPLACE VIEW (PostgreSQL, MySQL, Oracle) ou ALTER VIEW (SQL Server). Para remover, usa-se DROP VIEW nome_da_view;.
Para que servem as views na prática
As views resolvem alguns problemas bem concretos do dia a dia:
- Simplificar consultas complexas: JOINs, cálculos e filtros ficam escondidos atrás de um nome claro, e quem consulta escreve SQL mais curto.
- Centralizar regras de negócio: se “cliente ativo” significa “comprou nos últimos 12 meses”, essa regra fica em um único lugar. Mudou a regra? Altera-se só a view.
- Controlar acesso a dados: é possível dar permissão a um usuário para consultar a view sem dar acesso às tabelas originais. Assim, colunas sensíveis como CPF ou salário ficam de fora.
- Manter compatibilidade: se uma tabela for reestruturada, uma view com o formato antigo pode manter relatórios e sistemas antigos funcionando.
- Padronizar nomes: colunas com nomes técnicos podem ganhar apelidos mais legíveis para analistas e ferramentas de relatório.
Exemplo: usando view para proteger dados
Suponha uma tabela funcionarios com nome, setor, e-mail, CPF e salário. A equipe de comunicação precisa da lista de nomes e e-mails por setor, mas não deve ver CPF nem salário. Uma solução comum é:
CREATE VIEW vw_contatos_funcionarios AS
SELECT nome, setor, email
FROM funcionarios
WHERE ativo = TRUE;
GRANT SELECT ON vw_contatos_funcionarios TO equipe_comunicacao;
O grupo equipe_comunicacao consulta apenas o que precisa. Esse uso de views como “camada de segurança” é um dos mais valorizados em ambientes corporativos.
View comum x view materializada
Alguns bancos oferecem um segundo tipo: a view materializada. Nela, o resultado da consulta é de fato armazenado em disco, como uma “foto” dos dados. A leitura fica muito mais rápida, mas os dados só são atualizados quando a view é atualizada (no PostgreSQL, por exemplo, com REFRESH MATERIALIZED VIEW).
| Característica | View comum | View materializada |
|---|---|---|
| Armazena dados? | Não, só a consulta | Sim, guarda o resultado |
| Dados sempre atuais? | Sim | Só após atualização |
| Velocidade de leitura | Igual à da consulta original | Geralmente bem maior |
| Ocupa espaço? | Praticamente nenhum | Sim |
| Uso típico | Simplificar e proteger acesso | Relatórios pesados e painéis |
O suporte varia: PostgreSQL e Oracle têm views materializadas nativas; no SQL Server o recurso equivalente se chama “indexed view”; o MySQL não oferece view materializada nativa.
Dá para inserir e atualizar dados por uma view?
Em muitos casos, sim. Views simples, baseadas em uma única tabela, sem funções de agregação (SUM, COUNT), sem GROUP BY e sem DISTINCT, costumam ser atualizáveis: um UPDATE na view altera a tabela original.
Já views com JOINs, agregações ou colunas calculadas normalmente são somente leitura. Um recurso útil é a cláusula WITH CHECK OPTION, que impede inserir ou alterar, pela view, linhas que não atenderiam ao filtro dela. As regras exatas mudam de um banco para outro, então vale consultar a documentação do sistema que você usa.
Cuidados e limitações
- View não deixa a consulta mais rápida por si só: uma view comum executa a mesma consulta de antes. Se ela é lenta, continuará lenta. Desempenho depende de índices e de uma consulta bem escrita.
- Evite views em cima de views em cima de views: camadas demais dificultam entender o que está sendo executado e podem gerar planos de execução ruins.
- Cuidado com
SELECT *: em alguns bancos, a lista de colunas da view é fixada no momento da criação. Se a tabela ganhar colunas novas, a view pode não refleti-las. Liste as colunas explicitamente. - Dependências: apagar ou renomear uma coluna usada por uma view pode quebrá-la. Documente quais views dependem de quais tabelas.
Boas práticas de nomenclatura e organização
Muitas equipes usam um prefixo como vw_ ou v_ para deixar claro que se trata de uma view, e não de uma tabela. Nomes descritivos, como vw_vendas_mensais_por_loja, ajudam quem chega depois. Também é uma boa ideia manter os scripts de criação das views versionados (por exemplo, no Git) junto com o restante do código do sistema, para que qualquer mudança fique registrada.
Conclusão
Views são uma ferramenta simples e poderosa: transformam consultas complicadas em “tabelas” fáceis de usar, centralizam regras de negócio e ajudam a controlar quem vê o quê. Entender a diferença entre view comum e materializada, e saber quando uma view pode ou não ser atualizada, já coloca você um passo à frente em projetos reais. Se quiser aprofundar seus conhecimentos em SQL, modelagem e administração de bancos de dados, vale explorar os cursos gratuitos de banco de dados disponíveis na Cursa e praticar com exemplos do seu dia a dia.
























