Ramos da InformáticaBanco de DadosComo Simplificar Consultas Complexas com Views no SQL

Como Simplificar Consultas Complexas com Views no SQL

-

Uma view em SQL é uma maneira alternativa de observação de dados de uma ou mais entidades (tabelas), que compõem uma base de dados. Pode ser considerada como uma tabela virtual ou uma consulta armazenada.

View é um resultado originado de uma consulta pré-definida. Essencialmente é um metadado que mapeia uma query para outra, por isto pode ser considerado como uma tabela virtual. Como o próprio nome diz, ela representa uma visão de dados e não contém dados. Com ela você tem a ilusão que está vendo uma tabela que não existe.

VAI GOSTAR:

Dica de Leitura: Se você está interessado em aprender mais sobre como otimizar e melhorar a eficiência dos seus projetos, especialmente aqueles que envolvem bancos de dados e consultas complexas como as vistas em SQL, então não perca a chance de descobrir como o OpenAI Codex pode ser uma ferramenta poderosa. Confira nosso guia sobre como usar o OpenAI Codex com mais eficiência e veja como você pode aplicar essas habilidades para simplificar suas consultas e melhorar a performance dos seus projetos.

Pode ajudar entender saber que elas também são chamadas de named queries ou stored queries. Não confundir query (consulta) com resultado. Ela é a query mesmo. É basicamente um texto de um SELECT. Pense que ela é uma query que você armazena em uma variável e ao invés de escrever toda a query de novo sempre que for necessária usa a variável. Claro que isto é uma grande simplificação para facilitar o entendimento, o funcionamento real é pouco mais complexo que isto mas não é importante aqui.

Elas não são carregadas, elas são geradas sempre que forem necessárias.

A não ser que a view seja materializada, aí você terá tabelas reais representando essas views. Mas a carga delas ocorrerão conforme a necessidade e otimizações do banco de dados. Só neste tipo de view é que os dados são atualizados quando as tabelas reais sofrem atualizações (ao final deste artigo, veja a diferença).

Mas é importante notar que mesmo em uma view não materializada existe a ilusão de que uma atualização da tabela real envolvida reflita na view, afinal a view é gerada no momento que ela é necessária.

Essas tabelas virtuais são dinâmicas, elas só existem no momento em que você precisa delas. Somente a query para sua geração é pré-definida. Se um dado for atualizado logo em seguida uma view for acessada, essa atualização não será considerada neste momento, somente na próxima vez que a view for usada.

É bom entender que essa “tabela virtual” que é criada, não é bem uma tabela física criada em memória com todos os dados que você precisa. A view é apenas uma forma de traduzir uma query para outra query mais complexa. Mas uma otimização pode acabar tornando sim uma view comum em tabela física. Claro isto depende da implementação do DB.

Como Simplificar Consultas Complexas com Views no SQL

Uma view é muito usada para ajudar dar entendimento do projeto lógico do banco de dados.

Exemplo:

Aqui vemos uma view criada para facilitar o acesso aos funcionários que são de Seattle que. Desta forma é possível acessar as informações mais importantes destes funcionários de forma consolidada em uma “tabela virtual” chamada SeattleOnly.

Fazendo com que desta forma possuam todas as vantagens citadas abaixo.

CREATE VIEW dbo.SeattleOnly
AS
SELECT p.LastName, p.FirstName, e.JobTitle, a.City, sp.StateProvinceCode
FROM HumanResources.Employee e
INNER JOIN Person.Person p
ON p.BusinessEntityID = e.BusinessEntityID
    INNER JOIN Person.BusinessEntityAddress bea 
    ON bea.BusinessEntityID = e.BusinessEntityID 
    INNER JOIN Person.Address a 
    ON a.AddressID = bea.AddressID
    INNER JOIN Person.StateProvince sp 
    ON sp.StateProvinceID = a.StateProvinceID
WHERE a.City = 'Seattle'

Retirado do exemplo usando o banco AdventureWorks da Microsoft.

Exemplo de uso:

SELECT * FROM dbo.SeattleOnly WHERE LastName = 'Willians';

Note que retornará 4 colunas. No fundo isto é o mesmo que escrever:

SELECT p.LastName, p.FirstName, e.JobTitle, a.City, sp.StateProvinceCode
FROM HumanResources.Employee e
INNER JOIN Person.Person p
ON p.BusinessEntityID = e.BusinessEntityID
    INNER JOIN Person.BusinessEntityAddress bea 
    ON bea.BusinessEntityID = e.BusinessEntityID 
    INNER JOIN Person.Address a 
    ON a.AddressID = bea.AddressID
    INNER JOIN Person.StateProvince sp 
    ON sp.StateProvinceID = a.StateProvinceID
WHERE a.City = 'Seattle' AND p.LastName = 'Willians'

Vantagens no uso de Views

  1. Você pode usar este resultado em outras consultas diminuindo a complexidade, afinal você fará referência a uma tabela virtual montada fora desta consulta. De uma certa forma podemos considerar como syntax sugar para uma query. Você tem uma visão mais limitada dos dados sem grandes preocupações.
  2. Estas consultas pré-definidas ficam armazenadas e você não precisa lembrar de como criá-las. Não confundir com resultados.
  3. Como o próprio nome ajuda identificar elas permitem criar uma visão mais lógica para um humano entender a modelagem.
  4. Facilita a troca do modelo físico sem o perigo de quebrar queries existentes.
  5. Eventualmente o banco de dados pode fazer algumas otimizações por já ter conhecimento das queries utilizadas nas views. Mas normalmente isto depende até mais das estatísticas coletadas.
  6. Você pode colocar permissões na view, ou seja, você pode proibir acesso à tabelas em seu estado bruto, mas em uma certa condição o usuário pode ter acesso à informação da forma como você definiu na view. Você controla melhor o que e como o usuário pode acessar a informação. Funciona como um firewall.
  7. Regras de negócio podem ser adotadas nas views. A maneira como você vai acessar os dados está pré-definida. Isto é útil para formatar dados, ajudar ferramentas externas e facilitar o acesso via APIs. Pense em colunas computadas. Você pode usá-las como um proxy e realizar operações sempre que os dados sejam acessados.
  8. Podem facilitar o acesso em base legada, tornando migrações e transições indolores.
  9. Se a view for materializada pode ter ganho de performance para o acesso aos dados já “consolidados”.

Desvantagens no uso de Views

  1. Esconde uma complexidade da query podendo enganar o desenvolvedor quanto à performance necessária para acessar determinada informação. E pode ser pior quando views usam outras views. Em alguns casos você pode estar fazendo consultas desnecessárias sem saber de forma muito intensiva.
  2. Cria uma camada extra. Mais objetos para administrar. Algumas pessoas consideram isto um aumento de complexidade. Uma outra forma de ver isto é que uma view pode ser mal usada.
  3. Pode limitar exageradamente o que o usuário pode acessar impedindo certas tarefas.
  4. Se a view for materializada fará com que alterações nas tabelas reais envolvidas sejam mais lentas, afinal são mais tabelas para atualizar. Este tipo de view funciona de forma semelhante a um gatilho.

Existem alguns detalhes técnicos que podem trazer problemas mas acho que não é relevante para esta pergunta.

Diferença para Stored Procedure

Acho que já começa entrar em outra questão. Mas resumindo uma Stored Procedure permite mais flexibilidade para criar algoritmos mais complexos mas ela não cria uma tabela virtual. Como você vai lidar com isto para expor os dados e chamar uma Sproc é um problema do programador dela ou da query que vai usá-la.

LEIA TAMBÉM: 21 comandos SQL essenciais para programadores e BI

Qual a diferença entre view e Materialized view?

View

A view é uma consulta (chega ser um código SQL mesmo) simples armazenada no banco de dados que cria uma ilusão de ser uma tabela, e pode ser usada em diversas operações para:

  1. simplificar as queries e facilitar o acesso à determinadas informações
  2. conformar melhor com o modelo lógico
  3. permitir controlar melhor o acesso aos dados para determinados usuáriosPode-se criar uma view com determinadas colunas e dar permissão de acesso a um usuário ou grupo para essa view, não para a tabela física, aí ele só terá acesso a esses dados.

Todo conjunto de dados da view é gerado no momento que é solicitado (se nenhuma otimização for feita pelo banco de dados). E esse é o único custo, que nem pode ser considerado exatamente de extra porque se está usando ela, provavelmente precisaria fazer isto de qualquer jeito.

Materialized view

Esta é uma view que cria uma tabela auxiliar para armazenar os dados da query estabelecida pela view. Assim o banco de dados cria uma espécie de gatilho automático para que toda atualização de dados nas colunas envolvidas atualize também a visão materializada (tabela auxiliar), permitindo assim o acesso direto aos dados sem maiores processamentos em uma consulta.

  1. Com ela você ganha performance de acesso aos dados, mas passa ter um custo maior de atualização dos dados. Precisa analisar o que é mais interessante em cada caso. Então esta é uma otimização de acesso.
  2. Ela, obviamente, ocupa espaço em “disco”.

Essas são as principais vantagens e desvantagens dela sobre a view normal.

Fora o fato de haver armazenamento dos dados, elas funcionam de forma essencialmente idênticas (pode variam um pouco dependendo do fornecedor de banco de dados).

É possível simular uma materialized view em todo banco de dados que tenha um mecanismo de trigger.

Referência: https://github.com/maniero/SOpt/blob/master/SQL/Conceptual.md

Perguntas Frequentes (FAQ): Views em SQL

Uma View consome espaço no disco rígido?

Não da mesma forma que uma tabela comum. Uma View armazena apenas a definição da consulta (o código SQL) no dicionário de dados do banco. Os dados que você vê nela continuam residindo nas tabelas originais. A exceção são as “Materialized Views” (disponíveis em bancos como PostgreSQL e Oracle), que salvam o resultado em disco para ganhar performance.

Posso fazer um INSERT ou UPDATE diretamente em uma View?

Sim, em alguns casos (chamadas de Updatable Views). Geralmente, isso é permitido se a View for simples e referenciar apenas uma tabela. Se a View tiver JOINs, funções de agregação (SUM, AVG) ou a cláusula DISTINCT, o banco de dados não saberá em qual linha original aplicar a mudança e impedirá a operação.

Qual a principal vantagem de usar Views para a segurança?

Com as Views, você pode dar permissão de acesso a um usuário para visualizar apenas uma “fatia” dos dados. Por exemplo, você pode criar uma View que mostra o nome e o cargo dos funcionários, mas esconde a coluna de salário. O usuário terá permissão para ler a View, mas não terá acesso direto à tabela original sensível.

Ramos da Informática
Ramos da Informáticahttps://ramosdainformatica.com.br
Ramos da Informática é um hub de comunidade dedicado a linguagens de programação, banco de dados, DevOps, Internet das Coisas (IoT), tecnologias da Indústria 4.0, cibersegurança e startups. Com curadoria de conteúdos de qualidade, o projeto é mantido por Ramos de Souza Janones.

Mais recentes

Como aprender a programar, um guia definitivo

Última atualização em 23/04/2026. Guia completo sobre: Como aprender a programar. Espero que este “guia” ou “manifesto”, como prefiro chamar, seja...

Stream Deck para Desenvolvedores: o Console de Comando do Futuro

Esqueça os streamers. Descubra como o Stream Deck se tornou o hardware essencial para Engenheiros de IA e Full...

Como Usar o Skills in Chrome no Brasil: Tutorial Completo de IA

A inteligência artificial já faz parte do nosso fluxo de trabalho, mas ter que reescrever os mesmos prompts repetidamente...

Context Engineering: Como Arquitetar Dados para LLMs e RAG

Na edição desta newsletter intitulada “Engenharia de Prompt: Não é só mais uma buzzword“: https://www.linkedin.com/pulse/engenharia-de-prompt-n%C3%A3o-%C3%A9-s%C3%B3-mais-uma-buzzword-de-souza-janones-tpkxf tratei sobre o tema...
E-Zine Dev

Evolua para Sênior

Estratégias de Node.js, arquitetura Limpa e IA que nunca publicamos no blog. Junte-se a +10.000 devs.

Assinar Gratuitamente Zero spam. Cancele quando quiser.

Aprender Idiomas com Google Tradutor: Na Prática

O Google está lançando um novo recurso experimental com tecnologia de IA no Google Tradutor, projetado para ajudar as...

Comunidades Internacionais de Desenvolvedores

Descubra as melhores comunidades internacionais de devs para 2026: GitHub, Stack Overflow, Discord e mais. Comparativo de salários Brasil vs. exterior e guia de carreira remota.

Mais Lidos

Configura CodeGPT no VS Code (Guia Definitivo)

Configure o ChatGPT com o VS Code utilizando a...

Como Processar e Criar Áudios no Node.js

O node-web-audio-api é uma implementação da Web Audio API...

Como Desenvolver e Implantar Skills para Agentes de IA

A era de tratar a IA como um chatbot...

Comandos SQL: 21 Comandos Essenciais para Programadores

Selecionamos 21 comandos e instruções SQL essenciais o qual...
E-Zine Dev

Evolua para Sênior

Estratégias de Node.js, arquitetura Limpa e IA que nunca publicamos no blog. Junte-se a +10.000 devs.

Assinar Gratuitamente Zero spam. Cancele quando quiser.

Você vai gostarrelacionados
Continue aprendendo

E-Zine Dev Ramos

Quer dominar arquitetura e IA?

Junte-se a +10.000 profissionais. Receba semanalmente estratégias de Node.js, React e IA que nunca publicamos no blog.

Assinar Gratuitamente Zero spam. Cancele quando quiser.