Cómo crear una vista en SQL Server
Aprende a crear, consultar, modificar y eliminar vistas en SQL Server con ejemplos prácticos.
Actualizado el
Una vista en SQL Server es una consulta guardada en la base de datos. Se consulta como una tabla, pero conserva una consulta sobre sus objetos base: no es una copia autónoma de sus filas. La sintaxis de esta guía es específica de SQL Server.
Crear una vista en SQL Server
CREATE VIEW debe ser la primera sentencia de su batch. GO es un separador reconocido por herramientas cliente como SSMS, no una sentencia Transact-SQL.
GO
CREATE VIEW dbo.VistaEmpleadosFinanzas AS
SELECT nombre, apellido, departamento
FROM dbo.Empleados
WHERE departamento = 'Finanzas';
GODespués puedes usarla así:
SELECT * FROM VistaEmpleadosFinanzas;Crear una vista con JOIN
CREATE VIEW dbo.VistaPedidosClientes AS
SELECT
c.Nombre AS Cliente,
p.Id AS PedidoId,
p.Total,
p.Fecha
FROM dbo.Pedidos p
JOIN dbo.Clientes c ON c.Id = p.ClienteId;Esta vista deja preparada una consulta frecuente entre pedidos y clientes y simplifica su lectura. Que la definición incluya un JOIN no garantiza que la vista sea actualizable.
Modificar una vista
Para cambiar una vista existente usa ALTER VIEW.
ALTER VIEW dbo.VistaEmpleadosFinanzas AS
SELECT nombre, apellido, email, departamento
FROM dbo.Empleados
WHERE departamento = 'Finanzas';Si no quieres comprobar antes si la vista existe, CREATE OR ALTER VIEW crea la definición o actualiza la existente en una sola sentencia:
CREATE OR ALTER VIEW dbo.VistaEmpleadosFinanzas AS
SELECT nombre, apellido, email, departamento
FROM dbo.Empleados
WHERE departamento = 'Finanzas';Al igual que CREATE VIEW y ALTER VIEW, debe ocupar la primera sentencia de su batch.
Eliminar una vista
DROP VIEW IF EXISTS dbo.VistaEmpleadosFinanzas;WITH SCHEMABINDING
WITH SCHEMABINDING vincula la vista al esquema de sus dependencias y evita cambios incompatibles en los objetos base mientras exista esa dependencia. Exige referencias con esquema explícito y columnas enumeradas:
CREATE VIEW dbo.VistaPedidos
WITH SCHEMABINDING
AS
SELECT p.Id, p.ClienteId, p.Total
FROM dbo.Pedidos AS p;Cuándo usar vistas
Las vistas son útiles cuando quieres:
- Reutilizar una consulta compleja.
- Ocultar columnas que no deben consultar ciertos usuarios.
- Simplificar informes o consultas de lectura.
- Centralizar una regla de consulta para no repetirla en varios sitios.
Una vista no mejora el rendimiento por sí sola: si la consulta interna es lenta, revisa los planes de ejecución y los índices de las tablas base.
Buenas prácticas
- Usa nombres claros, por ejemplo
VistaClientesActivos. - No metas lógica innecesaria si una consulta simple basta.
- Revisa el rendimiento de la consulta base.
- Evita usar
SELECT *en vistas que deban mantenerse a largo plazo. - Documenta de qué tablas depende cada vista si el proyecto es grande.
Límites de las vistas en SQL Server
CREATE VIEWyALTER VIEWdeben ser la primera sentencia de su batch.- Una vista admite un máximo de 1.024 columnas.
- No se admite
ORDER BYsalvo que esté asociado aTOPuOFFSET; aun así, no lo uses como garantía del orden al consultar la vista. - La definición no admite
INTO,OPTION, tablas temporales ni variables de tabla. - La actualización directa está limitada: en el caso normal debe afectar columnas de una sola tabla base y no incluir agregados, expresiones ni
UNION; otros escenarios requieren un diseño específico, por ejemplo triggersINSTEAD OF. - El rendimiento depende de la consulta y de los índices de las tablas base.
Si trabajas con otro SGBD, consulta la guía separada sobre vistas en MySQL; sus opciones y limitaciones no son intercambiables con las de SQL Server.