T-SQL · SQL Server

Vistas en SQL Server

Crea y modifica vistas en T-SQL con un ejemplo reproducible y reglas claras para evitar errores habituales.

Actualizado: 27 septiembre 2026Ejemplos explicados
Contenido de esta guía

Qué es una vista en SQL Server

Una VIEW es una consulta guardada con un nombre. Al consultar una vista normal, SQL Server calcula sus filas a partir de las tablas base. Sirve para reutilizar una selección de columnas o filas, simplificar consultas repetidas y ofrecer una interfaz estable a otros usuarios.

Esta guía trata de vistas de SQL Server y usa T-SQL. Si buscas la idea común a otros motores, empieza por qué es una VIEW en SQL; si quieres practicar la noción desde cero, sigue la lección de vistas.

Crear y consultar una vista: ejemplo completo

Ejecuta este ejemplo en una base de pruebas con SQL Server Management Studio. La tabla es ficticia. GO separa lotes en esa herramienta; no es una instrucción T-SQL para enviar desde una aplicación.

Datos de prueba
CREATE TABLE dbo.productos_demo (
    id int NOT NULL PRIMARY KEY,
    nombre nvarchar(80) NOT NULL,
    precio decimal(10,2) NOT NULL,
    stock int NOT NULL
);
INSERT INTO dbo.productos_demo (id, nombre, precio, stock)
VALUES (1, N'Teclado', 39.90, 7),
       (2, N'Monitor', 179.00, 0),
       (3, N'Ratón', 18.50, 12);
GO
CREATE VIEW dbo.v_productos_disponibles AS
SELECT id, nombre, precio
FROM dbo.productos_demo
WHERE stock > 0;
GO
SELECT id, nombre, precio
FROM dbo.v_productos_disponibles
ORDER BY precio DESC, id;

El resultado contiene Teclado (39,90) y Ratón (18,50), en ese orden. Monitor queda fuera porque su stock es cero. Si cambia el stock en la tabla, una consulta posterior a la vista refleja el cambio.

CREATE VIEW debe iniciar su lote. Por eso hay un GO entre la carga de datos y la definición de la vista, y otro antes del SELECT. Desde un controlador o biblioteca, envía esas instrucciones como ejecuciones separadas en lugar de incluir GO en el SQL.

Cambiar o eliminar la definición

En SQL Server 2016 SP1 y versiones posteriores, CREATE OR ALTER VIEW crea la vista si falta o cambia su definición si ya existe. Así puedes volver a ejecutar una migración sin decidir primero entre CREATE y ALTER. En versiones anteriores, usa CREATE VIEW o ALTER VIEW según exista el objeto.

Actualizar la regla de disponibilidad
CREATE OR ALTER VIEW dbo.v_productos_disponibles AS
SELECT id, nombre, precio
FROM dbo.productos_demo
WHERE stock >= 5;
GO
SELECT nombre, precio
FROM dbo.v_productos_disponibles
ORDER BY nombre;

Con los datos iniciales, el resultado sigue incluyendo Teclado y Ratón. Si necesitas retirar la vista, DROP VIEW IF EXISTS dbo.v_productos_disponibles; elimina la definición de la vista y sus permisos, pero conserva dbo.productos_demo. Úsalo solo cuando ya no haya consultas que dependan de ella. La variante IF EXISTS requiere SQL Server 2016 o posterior.

Tres errores frecuentes

  1. Confiar en el orden de la vista. SQL Server no garantiza el orden de las filas al leer una vista. Añade ORDER BY al SELECT exterior. Incluso si una definición admite ORDER BY junto a TOP u OFFSET, eso no ordena por sí solo el resultado de la consulta exterior.
  2. Usar SELECT * y luego cambiar la tabla. Enumera las columnas necesarias en la definición. Si la vista no usa SCHEMABINDING y cambian los objetos base de forma que afecte a sus metadatos, revisa la definición y ejecuta EXEC sys.sp_refreshview N'dbo.v_productos_disponibles'; cuando corresponda.
  3. Crear la vista a mitad de un lote. Un CREATE VIEW después de un INSERT en el mismo lote falla. Separa las ejecuciones o, en herramientas compatibles, usa GO como en el ejemplo.

Permisos, esquema y rendimiento

Una vista puede exponer solo las columnas necesarias de las tablas base. Puedes conceder permisos sobre la vista para simplificar el acceso, pero revisa también la cadena de propiedad y cualquier permiso necesario en tu entorno. Una vista no convierte automáticamente una consulta lenta en rápida: comprueba filtros, índices de las tablas base y el plan de ejecución si el rendimiento importa.

Una vista normal es virtual. Una vista indexada es un caso especial que almacena resultados y exige reglas adicionales. No añadas índices a una vista corriente por rutina. Con WITH SCHEMABINDING, SQL Server impide cambios en tablas base que romperían la definición; la vista debe referirse a los objetos con nombre de esquema y tabla, como dbo.productos_demo. Elige esta opción cuando necesites esa garantía y conozcas el coste de cambiar el esquema.

Si alteras una vista indexada, SQL Server elimina sus índices; planifica su recreación. Para una vista normal que solo reutiliza columnas y filtros, empieza por la definición sencilla del ejemplo.

Qué debes recordar

  • CREATE VIEW guarda la definición; consulta la vista desde FROM.
  • CREATE OR ALTER VIEW está disponible desde SQL Server 2016 SP1.
  • Ordena en la consulta final y separa los lotes al crear la vista.
  • SCHEMABINDING y las vistas indexadas son opciones para necesidades concretas.

Continúa practicando

Fuentes técnicas consultadas