programa
T-SQL (Transact-SQL) es la extensión de SQL estándar de Microsoft, diseñada específicamente para Microsoft SQL Server. Incluye todas las capacidades nucleares de SQL para consultar y gestionar datos, y además añade funciones de programación procedural que te permiten escribir lógica de base de datos más potente y dinámica.
En esta guía, verás cómo funciona T-SQL y cómo utilizarlo con eficacia en escenarios reales. También cubriré casos de uso habituales como consultar bases de datos, escribir procedimientos almacenados y automatizar flujos de trabajo rutinarios, con ejemplos prácticos.
Si estás empezando con SQL, comienza con nuestro curso Introduction to SQL, o el curso Intermediate SQL si ya tienes algo de experiencia. Además, el SQL Basics Cheat Sheet, que puedes descargar, es una referencia muy útil porque reúne las funciones de SQL más comunes.
Qué es T-SQL y en qué se diferencia de SQL
Para entender mejor T-SQL, piensa en SQL como un idioma universal y en T-SQL como un dialecto profesional especializado.
SQL (Structured Query Language) es el lenguaje estándar para interactuar con bases de datos relacionales. Es declarativo: especificas qué resultado quieres, como seleccionar o filtrar datos, y el motor de la base de datos decide cómo ejecutar la consulta.
T-SQL, en cambio, es la extensión de SQL de Microsoft usada en Microsoft SQL Server. Amplía el estándar añadiendo capacidades de programación procedural, lo que te permite controlar cómo se realizan las operaciones paso a paso.
A partir de esta definición, T-SQL introduce varias funciones potentes que van más allá de las consultas básicas, entre ellas:
-
Variables: Puedes usar las palabras clave
DECLAREySETpara almacenar datos en memoria y reutilizarlos dentro de scripts. -
Flujo de control: Puedes usar lógica como
IF,WHILEyBEGIN...ENDpara controlar la ejecución y decidir qué código se ejecuta. -
Gestión de errores: T-SQL incorpora bloques
TRY...CATCH, que permiten capturar un error y gestionarlo con elegancia sin interrumpir toda la operación. -
Procedimientos almacenados: Puedes crear bloques de lógica reutilizables que se ejecutan dentro de la base de datos.
Si trabajas con SQL Server, en DataCamp tienes muchos recursos útiles. Para empezar, te recomiendo el curso Introduction to SQL Server para dominar los fundamentos de SQL Server orientados al análisis de datos.
Sintaxis y estructura básicas de T-SQL
T-SQL utiliza la misma sintaxis principal que el SQL estándar, así que si ya te suena SQL, te resultará sencillo. En esta sección, te explico las sentencias más comunes de T-SQL con ejemplos simples y prácticos.
SELECT, INSERT, UPDATE, DELETE
Estos comandos son estándar en la mayoría de los dialectos de SQL, incluido Microsoft SQL Server, para el que está creado T-SQL.
SELECT
La orden que se usa para recuperar datos de tablas específicas. Por ejemplo, la consulta siguiente obtiene FirstName y LastName de la tabla Customers.
-- Retrieve data from the Customers table
SELECT FirstName, LastName
FROM Customers
WHERE Country = ‘USA’; -- Filters rows to only customers in the USA
INSERT
Esta orden se usa para insertar datos nuevos en la tabla. La consulta de abajo inserta una nueva fila en la tabla customers.
-- Insert a new row into a table
INSERT INTO customers (FirstName, city)
VALUES (‘Alice’, ‘Nairobi’);
UPDATE
Esta orden sirve para modificar datos existentes en la base de datos. Por ejemplo, la consulta siguiente cambia la ciudad a "Mombasa" para la usuaria "Alice".
-- Update existing data
UPDATE customers
SET city = ‘Mombasa’
WHERE FirstName= ‘Alice’; -- Always use WHERE to avoid updating all rows
DELETE
Esta orden elimina datos de la base de datos. Por ejemplo, la consulta siguiente borra la fila donde FirstName es "Alice".
-- Delete data from a table
DELETE FROM customers
WHERE FirstName= ‘Alice’; -- Filters which rows to remove
Te recomiendo probar nuestro itinerario de habilidades SQL Server Fundamentals para aprender más sobre cómo resumir y analizar datos con funciones de SQL Server.
Ejecución por lotes
Una característica propia de T-SQL es cómo ejecuta el código en lotes. Un lote es un grupo de una o más sentencias SQL que se envían a SQL Server como una unidad.
La palabra clave GO se usa para separar lotes:
-- First batch
SELECT * FROM Customers;
GO
-- Second batch (executed separately)
SELECT * FROM Orders;
GO
Es importante tener en cuenta que:
-
GOno es un comando de T-SQL, pero lo reconocen herramientas como SQL Server Management Studio. -
Señala el final de un lote y el comienzo de otro.
-
Las variables no persisten entre lotes. Los objetos temporales sí persisten entre lotes dentro de la misma sesión.
Comentarios y formato
Puedes usar comentarios en T-SQL para hacer tu código SQL más legible y fácil de mantener. Puedes usar comentarios de una sola línea o multilínea, como se muestra a continuación:
-- This query retrieves all customers
SELECT * FROM Customers;
/* This query retrieves customers
from the USA and Canada */
SELECT *
FROM Customers
WHERE Country IN ('USA', 'Canada');
Variables y tipos de datos en T-SQL
T-SQL te permite almacenar valores en variables y usarlos en tus consultas, haciendo tus scripts más flexibles y dinámicos. Veamos cómo crear estas variables.
Declaración de variables
Para crear una variable, utiliza la palabra clave DECLARE. Por convención, todos los nombres de variables en T-SQL comienzan con el símbolo @.
-- Declares a variable to store text
DECLARE @CustomerName VARCHAR(50);
Asignación de valores
Puedes asignar valores usando SET (recomendado para valores únicos) o SELECT (útil al recuperar desde una tabla).
-- Assign using SET
SET @CustomerName = 'Alice';
-- Assign using SELECT
SELECT @Age = 30;
Por ejemplo, la consulta siguiente devuelve una lista de clientes que viven en Londres, usando una variable en lugar de fijar el valor en duro.
-- Assign the variable city
DECLARE @City VARCHAR(50);
SET @City = 'London';
-- Use the variable in a query
SELECT name, city
FROM customers
WHERE city = @City; -- Filters results based on variable value
Tipos de datos comunes
Estos son algunos de los tipos de datos de T-SQL más utilizados, comunes a los tipos de datos en SQL:
-
INT: Números enteros, por ejemplo, 1, 100. -
VARCHAR(n): Texto de longitud variable, como nombres y emails. -
DATETIME: Valores de fecha y hora. -
DECIMAL(p, s): Números de precisión fija, como moneda.
Flujo de control en T-SQL (IF, WHILE, BEGIN...END)
Una de las ventajas de T-SQL es que te permite añadir lógica de programación a tus consultas. En lugar de limitarte a recuperar datos, puedes controlar cómo y cuándo se ejecuta el código. A continuación tienes ejemplos de lógica de control de flujo.
IF...ELSE (ejecución condicional)
La sentencia IF te permite ejecutar un bloque de código solo si se cumple una condición. Si la condición es falsa, puedes usar ELSE para indicar una acción alternativa.
Por ejemplo, la consulta de abajo cuenta el número total de pedidos y muestra "High order volume" si supera 100, o "Low order volume" si está por debajo de 100.
DECLARE @TotalOrders INT;
SELECT @TotalOrders = COUNT(*)
FROM Orders; -- Count total number of orders
IF @TotalOrders > 100
BEGIN
PRINT 'High order volume'; -- Runs if condition is true
END
ELSE
BEGIN
PRINT 'Low order volume'; -- Runs if condition is false
END
Bucles WHILE (lógica iterativa)
El bucle WHILE repite un bloque de código mientras una condición sea verdadera. Es útil para tareas que deben hacerse por "bloques" o para generar datos de prueba.
En el ejemplo, la consulta inicializa un contador en 1 y usa un bucle para imprimir el número actual e incrementarlo en 1 hasta llegar a 5.
DECLARE @Counter INT = 1;
WHILE @Counter <= 5
BEGIN
PRINT @Counter; -- Prints numbers from 1 to 5
SET @Counter = @Counter + 1; -- Increment counter
END
BEGIN...END (agrupación de sentencias)
El bloque BEGIN...END se usa para agrupar varias sentencias en un único bloque y asegurarte de que se ejecutan juntas de forma atómica.
Por ejemplo, la consulta siguiente imprimirá tanto "Customers found in USA" como "Proceeding with operation". Sin BEGIN...END, solo se ejecutaría la primera sentencia tras el IF.
IF EXISTS (SELECT 1 FROM Customers WHERE Country = 'USA')
BEGIN
PRINT 'Customers found in USA';
PRINT 'Proceeding with operation'; -- Both statements run together
END
¿Cuándo es útil el flujo de control?
El flujo de control en T-SQL se usa habitualmente para:
- Automatización: ejecutar scripts programados o tareas de mantenimiento
- Validación de datos: comprobar condiciones antes de insertar o actualizar datos
- Procesamiento por lotes: tratar datos en pasos o bucles
- Lógica de negocio: aplicar reglas directamente en la base de datos
Procedimientos almacenados en T-SQL
Un procedimiento almacenado es un conjunto guardado de sentencias T-SQL que puedes reutilizar tantas veces como quieras. En lugar de enviar un gran bloque de código desde tu aplicación al servidor cada vez, guardas el código en el servidor y solo llamas a su nombre.
Los procedimientos almacenados son útiles porque puedes reutilizarlos y sus planes de ejecución precompilados mejoran la eficiencia, además de ocultar lógica compleja tras una interfaz sencilla.
Por ejemplo, este procedimiento almacenado recupera el nombre y los apellidos de un cliente en función del ID que proporciones.
-- Create a stored procedure named GetCustomerByID
CREATE PROCEDURE GetCustomerByID
@CustomerID INT -- Input parameter to pass a customer ID
AS
BEGIN
-- Select the first and last name of a customer
SELECT FirstName, LastName
FROM Customers
WHERE CustomerID = @CustomerID; -- Filter to match the given ID
END;
Luego puedes ejecutar el procedimiento almacenado con la consulta siguiente:
-- Calls the procedure
EXEC GetCustomerByID @CustomerID = 1; Obtén una Certificación Top SQL
Funciones en T-SQL
T-SQL incluye funciones integradas y funciones definidas por el usuario (UDF) para transformar datos.
Funciones integradas
Estas funciones ya están disponibles en SQL Server y pueden usarse directamente en las consultas.
Función de texto
Transforma tipos de datos de texto. Por ejemplo, la consulta siguiente recupera todos los nombres de la tabla Customers y los convierte a mayúsculas.
-- Converts text to uppercase
SELECT UPPER(FirstName)
FROM Customers;
Función de fecha
Transforma y trabaja con fechas. La consulta de abajo devuelve la fecha y hora actuales del sistema.
-- Returns current date and time
SELECT GETDATE();
Función de agregación
Se usan para agregar valores de una tabla. Por ejemplo, la consulta siguiente cuenta el número total de filas (clientes) en la tabla Customers.
-- Counts rows
SELECT COUNT(*) AS TotalCustomers
FROM Customers;
Funciones definidas por el usuario (UDF)
También puedes crear tus propias funciones para reutilizar lógica en varias consultas.
Función escalar
Una función escalar devuelve un único valor y es útil cuando necesitas un resultado calculado único, como formateos o cálculos. En la consulta siguiente, la función recibe un nombre y apellidos como entrada y los devuelve como un único nombre completo.
-- Create a function that combines the first and last name
CREATE FUNCTION GetFullName
(@FirstName VARCHAR(50), @LastName VARCHAR(50))
RETURNS VARCHAR(100)
AS
BEGIN
RETURN @FirstName + ' ' + @LastName; -- Concatenates the two values
END;
Funciones con valor de tabla
Estas funciones devuelven una tabla. Por ejemplo, la función de abajo devuelve una tabla con todos los clientes que pertenecen al país especificado.
-- Create a table-valued function named GetCustomersByCountry
CREATE FUNCTION GetCustomersByCountry (@Country VARCHAR(50))
RETURNS TABLE -- Specifies that the function returns a table
AS
RETURN
(
-- Select all columns from the Customers table
SELECT *
FROM Customers
WHERE Country = @Country -- Filter rows by the given country
);
Te recomiendo probar nuestro itinerario profesional completo SQL Server Developer, que no solo te dará las habilidades para crear, actualizar y ejecutar procedimientos almacenados, sino que también te ayudará con funciones de agregación, joins, inserciones, eliminaciones de tablas y mucho más.
Gestión de errores en T-SQL
T-SQL usa bloques TRY...CATCH para manejar errores sin detener todo el script. Esto es clave para evitar caídas inesperadas y poder devolver mensajes útiles para depurar o registrar.
Por ejemplo, la consulta siguiente intenta ejecutar un cálculo que provoca un error, lo captura y muestra un mensaje legible en lugar de fallar.
BEGIN TRY
-- Attempt to run this code
SELECT 1 / 0; -- This causes a divide-by-zero error
END TRY
BEGIN CATCH
-- Runs if an error occurs in the TRY block
PRINT 'An error occurred: ' + ERROR_MESSAGE(); -- Displays the error message
END CATCH;
Transacciones en T-SQL
Una transacción garantiza que un grupo de operaciones o bien se complete en su totalidad o bien no se aplique. Sigue el principio ACID, que asegura que tu base de datos se mantenga consistente incluso si, por ejemplo, se corta la luz a mitad de una actualización.
En el ejemplo de abajo, la transacción transfiere dinero de una cuenta a otra y guarda ambos cambios juntos.
BEGIN TRANSACTION; -- Start the transaction
-- Deduct money from Account 1
UPDATE Accounts
SET Balance = Balance - 100
WHERE AccountID = 1;
-- Add money to Account 2
UPDATE Accounts
SET Balance = Balance + 100
WHERE AccountID = 2;
COMMIT; -- Save all changes permanently
Si algo va mal, puedes usar la función ROLLBACK para deshacer la transacción y restaurar los datos a su estado anterior.
-- Undo all changes made in the current transaction
ROLLBACK;
Las transacciones en T-SQL son importantes porque garantizan la integridad de los datos, especialmente en sistemas críticos como aplicaciones financieras, donde actualizaciones parciales podrían generar incoherencias.
Puedes probar nuestro itinerario Transactions and Error Handling in SQL Server, que cubre transacciones y gestión de errores en SQL Server.
Funciones habituales de T-SQL para análisis de datos
T-SQL incluye herramientas especialmente útiles para profesionales de datos. Veamos algunos ejemplos y cómo aplicarlos en análisis.
Funciones de ventana
Las funciones de ventana realizan cálculos a través de filas sin agruparlas en un único resultado. Se usan sobre todo para rankings, acumulados y analítica avanzada.
En el siguiente ejemplo, la consulta asigna un número de fila único a cada cliente según su CustomerID.
-- Assigns row numbers to customers
SELECT
FirstName,
ROW_NUMBER() OVER (ORDER BY CustomerID) AS RowNum -- Assigns row numbers
FROM Customers;
En la consulta:
-
ROW_NUMBER(): asigna números de fila únicos
-
RANK(): asigna rangos con huecos en empates -
OVER(): define la ventana (ordenación/segmentación)
Te recomiendo consultar nuestro SQL Window Functions Cheat Sheet descargable, con una guía de referencia práctica sobre los distintos tipos de funciones de ventana en SQL. Además, revisa nuestro curso Intermediate SQL Server para aprender más sobre el uso de T-SQL en análisis de datos, incluidas funciones de ventana para resumir información.
Expresiones de tabla comunes (CTE)
Las CTE (Common Table Expressions) crean un conjunto de resultados temporal que puedes reutilizar dentro de una consulta. La consulta siguiente crea una lista temporal de clientes de USA y luego recupera datos de ella.
-- Define a CTE
WITH CustomerCTE AS (
SELECT FirstName, Country
FROM Customers
WHERE Country = 'USA' -- Filter only USA customers
)
-- Query the CTE
SELECT *
FROM CustomerCTE;
Por otro lado, las CTE recursivas son un tipo especial de CTE que se referencian a sí mismas en su definición, permitiendo realizar operaciones repetidas. Son ideales para trabajar con datos jerárquicos como organigramas.
Te recomiendo el curso Hierarchical and Recursive Queries in SQL Server para aprender a escribir consultas avanzadas en SQL Server, incluidas CTE y CTE recursivas, con ejemplos prácticos.
Tablas temporales
Las tablas temporales almacenan datos para uso a corto plazo durante una sesión. Son útiles para preparar datos, simplificar transformaciones en varios pasos o mejorar el rendimiento en consultas complejas.
Para ver cómo funcionan las tablas temporales en T-SQL, considera estos tres bloques de consultas. El primero crea una tabla temporal, luego la rellena con datos de clientes y después la consulta dentro de la misma sesión.
-- Create a temporary table
CREATE TABLE #TempCustomers (
FirstName VARCHAR(50),
Country VARCHAR(50)
);
-- Insert data into the temporary table
INSERT INTO #TempCustomers
SELECT FirstName, Country
FROM Customers;
-- Retrieve data from the temporary table
SELECT * FROM #TempCustomers;
Es importante recordar que las tablas temporales llevan el prefijo # y se eliminan automáticamente al finalizar la sesión.
T-SQL frente a otros dialectos de SQL
Todos los dialectos de SQL comparten la misma base, pero cada sistema de bases de datos añade su propia sintaxis y funciones. T-SQL está diseñado específicamente para Microsoft SQL Server, lo que condiciona su funcionamiento y los casos en los que es más adecuado.
T-SQL vs. PostgreSQL (PL/pgSQL)
PostgreSQL usa PL/pgSQL para lógica procedural, similar a T-SQL pero con sintaxis y puntos fuertes diferentes. La tabla siguiente resume estas diferencias:
|
Categoría |
T-SQL (SQL Server) |
PostgreSQL (PL/pgSQL) |
|
Lenguaje procedural |
Integrado en T-SQL |
Usa PL/pgSQL |
|
Sintaxis de variables |
|
|
|
Nomenclatura de variables |
Usa prefijo |
Sin prefijo (por ejemplo, |
|
Estructura de bloques |
Más simple, a menudo implícita o con |
Explícita: requiere |
|
Bloque de ejemplo |
Lote estándar de T-SQL |
Envuelto en |
|
Tipos de datos avanzados |
Limitados |
Soporte nativo avanzado (JSONB, arrays, geométricos) |
|
Herramientas e integración |
Integración estrecha con herramientas de SQL Server |
Flexible entre plataformas |
|
Ecosistema |
Optimizado para Windows, Azure, SSMS y Power BI |
Open-source y multiplataforma |
Descubre nuestro itinerario de habilidades SQL for Database Administrators para aprender a diseñar bases de datos relacionales y estructurar tus consultas para mejorar el rendimiento.
T-SQL vs. MySQL
MySQL también admite SQL procedural, pero con un enfoque más simple y limitado. La tabla siguiente compara las diferencias de sintaxis y funciones de ambos dialectos.
|
Categoría |
T-SQL (Microsoft) |
MySQL |
|
Limitación de filas |
|
|
|
Gestión de errores |
Bloques |
Sintaxis DECLARE HANDLER más limitada |
|
Lógica procedural |
Rica, estructurada y muy programable |
Funciones procedurales más simples y limitadas |
|
Analítica |
Funciones de ventana y CTE |
Funciones analíticas básicas (mejorando en versiones recientes) |
|
Ecosistema |
Ligado a SQL Server y herramientas Enterprise |
Ligero; corazón del stack LAMP (Linux, Apache, etc.) |
|
Ideal para |
Lógica de negocio compleja y data warehousing |
Aplicaciones web y operaciones de lectura de alta velocidad |
Casos de uso reales de T-SQL
T-SQL se usa ampliamente más allá de las consultas simples. Estos son ejemplos donde me ha resultado especialmente útil como profesional de datos.
Consultas para informes
T-SQL se utiliza habitualmente para generar informes directamente desde la base de datos. Por ejemplo, puedes agregar ventas por región o clasificar los productos con mejor rendimiento usando funciones de ventana.
Procesos ETL (Extract, Transform, Load)
Los ingenieros de datos usan T-SQL en canalizaciones de datos para preparar y mover información. Por ejemplo, puedes extraer datos de tablas de staging, transformar formatos, limpiar incoherencias y cargarlos en tablas finales de reporting.
Scripts de limpieza de datos
Si tu base de datos tiene millones de filas con direcciones inconsistentes, puedes usar un script en T-SQL con bucles WHILE o CTE para identificar duplicados, rellenar valores faltantes o estandarizar formatos.
Lógica de backend en aplicaciones
Muchas aplicaciones confían en T-SQL para gestionar la lógica de negocio dentro de la base de datos. Puedes usar procedimientos almacenados para operaciones CRUD, realizar validaciones antes de insertar datos o usar transacciones para operaciones críticas.
Errores comunes y buenas prácticas
Aunque T-SQL es muy útil para consultas avanzadas, es fácil toparse con algunos problemas típicos. Estos son errores comunes que me he encontrado al usar T-SQL:
-
Abusar de bucles en lugar de lógica basada en conjuntos: Usar bucles como
WHILEpara procesar fila a fila puede ralentizar el rendimiento. SQL está diseñado para trabajar con conjuntos de datos a la vez. -
Falta de atención a los índices: no usar bien los índices puede volver las consultas lentas, especialmente en tablas grandes.
-
No usar transacciones correctamente: ejecutar varias operaciones relacionadas sin envolverlas en una transacción puede dejar tus datos en un estado inconsistente si algo falla a mitad de camino.
-
Ignorar la gestión de errores: si te saltas los bloques
TRY...CATCH, depurar será más difícil y tus scripts pueden fallar en silencio o de forma impredecible en producción.
Estas son las buenas prácticas que te recomiendo para escribir consultas más eficientes y fiables:
-
Prioriza consultas basadas en conjuntos: utiliza
JOIN,GROUP BYy funciones de ventana en lugar de bucles siempre que sea posible. Así aprovechas cómo SQL Server procesa datos de forma eficiente. -
Escribe código legible y mantenible: usa convenciones de nombres claras, da formato consistente a las consultas y añade comentarios cuando sea necesario. Así tu código será más fácil de leer, depurar y colaborar.
-
Prueba los procedimientos: prueba siempre los procedimientos almacenados y las consultas con diferentes entradas para asegurar que funcionan correctamente y cubren casos límite.
Conclusión
T-SQL amplía SQL estándar añadiendo capacidades de programación, lo que lo convierte en una herramienta flexible y potente para automatización, procesamiento y análisis de datos. Con funciones como variables, procedimientos almacenados y gestión de errores, te permite crear soluciones de base de datos más dinámicas y eficientes.
Como siguiente paso, te recomiendo probar nuestro itinerario profesional Associate Data Analyst en SQL para convertirte en un analista de datos solvente. Nuestro curso Reporting in SQL también te ayudará a dominar la creación de informes complejos. Por último, obtén nuestra SQL Associate Certification para demostrar tu dominio de SQL a la hora de resolver problemas de negocio y destacar entre otros profesionales.
Preguntas frecuentes sobre T-SQL
¿En qué se diferencia T-SQL del SQL estándar?
SQL es principalmente declarativo, mientras que T-SQL combina consultas declarativas con programación procedural, permitiéndote controlar cómo se ejecutan las operaciones.
¿Necesito aprender SQL antes de aprender T-SQL?
Sí, es importante entender lo básico de SQL, ya que T-SQL se construye directamente sobre conceptos clave como SELECT, INSERT, UPDATE y DELETE.
¿T-SQL está disponible en todos los dialectos de SQL?
No, T-SQL es específico del ecosistema de Microsoft y se utiliza principalmente con Microsoft SQL Server y herramientas relacionadas como Azure SQL.
¿Qué son los procedimientos almacenados y por qué son útiles?
Los procedimientos almacenados son bloques reutilizables de código T-SQL que se ejecutan dentro de la base de datos. Ayudan a mejorar el rendimiento, aplicar consistencia y simplificar la lógica de las aplicaciones.
¿Para qué se utilizan las funciones de ventana en T-SQL?
Las funciones de ventana se usan para tareas de análisis avanzado como rankings, totales acumulados y comparaciones entre filas sin agrupar los datos.

