Programa
T‑SQL (Transact‑SQL) é a extensão da Microsoft para o SQL padrão, criada especificamente para uso com o Microsoft SQL Server. Ele inclui todas as funcionalidades centrais do SQL para consultar e gerenciar dados e ainda adiciona recursos de programação procedural que permitem escrever lógicas de banco de dados mais poderosas e dinâmicas.
Neste guia, vou mostrar como o T‑SQL funciona e como usá-lo com eficiência em cenários do dia a dia. Também vou abordar casos de uso comuns, como consultar bancos de dados, escrever stored procedures e automatizar rotinas, com exemplos práticos.
Se você é novo em SQL, comece pelo nosso curso Introduction to SQL. Se já tem alguma experiência, confira o Intermediate SQL. Além disso, o SQL Basics Cheat Sheet, que você pode baixar, é um ótimo material de referência com as funções SQL mais usadas.
O que é T-SQL e como ele difere do SQL
Para entender melhor o T‑SQL, pense no SQL como um idioma universal e no T‑SQL como um dialeto profissional especializado.
SQL (Structured Query Language) é a linguagem padrão para interagir com bancos de dados relacionais. É declarativa: você especifica o que quer obter, como selecionar ou filtrar dados, e o mecanismo do banco decide como executar a consulta.
Já o T‑SQL é a extensão da Microsoft usada no Microsoft SQL Server. Ele amplia o SQL padrão com recursos de programação procedural, permitindo controlar como as operações são executadas passo a passo.
A partir dessa definição, o T‑SQL apresenta vários recursos poderosos que vão além das consultas básicas, incluindo:
-
Variáveis: você pode usar as palavras-chave
DECLAREeSETpara armazenar dados em memória e reutilizá-los em scripts. -
Fluxo de controle: você pode usar lógicas como
IF,WHILEeBEGIN...ENDpara controlar a execução e decidir qual trecho de código roda. -
Tratamento de erros: o T‑SQL traz blocos
TRY...CATCH, permitindo capturar erros e tratá-los sem derrubar toda a operação. -
Stored procedures: você pode criar blocos de lógica reutilizáveis que rodam dentro do banco.
Se você trabalha com SQL Server, saiba que a DataCamp tem muitos recursos excelentes para ajudar. Para começar, recomendo o curso Introduction to SQL Server para dominar o básico do SQL Server para análise de dados.
Sintaxe e estrutura básicas do T-SQL
O T‑SQL usa a mesma sintaxe central do SQL padrão, então, se você já está familiarizado com SQL, vai entendê-lo com facilidade. Nesta seção, vou apresentar as instruções mais comuns do T‑SQL com exemplos simples e práticos.
SELECT, INSERT, UPDATE, DELETE
Esses comandos são padrão na maioria dos dialetos SQL, incluindo o Microsoft SQL Server, para o qual o T‑SQL foi desenvolvido.
SELECT
Comando usado para recuperar dados de tabelas específicas. Por exemplo, a consulta abaixo retorna FirstName e LastName da tabela Customers.
-- Retrieve data from the Customers table
SELECT FirstName, LastName
FROM Customers
WHERE Country = ‘USA’; -- Filters rows to only customers in the USA
INSERT
Esse comando insere novos dados na tabela. A consulta abaixo insere uma nova linha na tabela customers.
-- Insert a new row into a table
INSERT INTO customers (FirstName, city)
VALUES (‘Alice’, ‘Nairobi’);
UPDATE
Esse comando altera dados existentes no banco. Por exemplo, a consulta abaixo muda o nome da cidade para "Mombasa" para a usuária "Alice".
-- Update existing data
UPDATE customers
SET city = ‘Mombasa’
WHERE FirstName= ‘Alice’; -- Always use WHERE to avoid updating all rows
DELETE
Esse comando remove dados do banco. Por exemplo, a consulta abaixo exclui a linha em que FirstName é "Alice".
-- Delete data from a table
DELETE FROM customers
WHERE FirstName= ‘Alice’; -- Filters which rows to remove
Para se aprofundar, recomendo a nossa trilha de habilidades SQL Server Fundamentals para aprender mais sobre como resumir e analisar dados usando funções do SQL Server.
Execução em lotes
Um recurso característico do T‑SQL é a execução de código em batches (lotes). Um lote é um grupo de uma ou mais instruções SQL enviadas ao SQL Server como uma única unidade.
A palavra‑chave GO é usada para separar os lotes:
-- First batch
SELECT * FROM Customers;
GO
-- Second batch (executed separately)
SELECT * FROM Orders;
GO
É importante observar que:
-
GOnão é um comando T‑SQL, mas é reconhecido por ferramentas como o SQL Server Management Studio. -
Ele sinaliza o fim de um lote e o início de outro.
-
As variáveis não persistem entre lotes. Objetos temporários persistem entre lotes na mesma sessão.
Comentários e formatação
Você pode usar comentários em T‑SQL para deixar seu código mais legível e fácil de manter. É possível usar comentários de linha única ou de múltiplas linhas, como abaixo:
-- 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');
Variáveis e tipos de dados no T-SQL
O T‑SQL permite armazenar valores em variáveis e usá-los nas consultas, deixando seus scripts mais flexíveis e dinâmicos. Vamos ver como criar essas variáveis.
Declarando variáveis
Para criar uma variável, use a palavra‑chave DECLARE. Por convenção, todos os nomes de variáveis em T‑SQL começam com o símbolo @.
-- Declares a variable to store text
DECLARE @CustomerName VARCHAR(50);
Atribuindo valores
Você pode atribuir valores usando SET (recomendado para valores únicos) ou SELECT (útil ao buscar de uma tabela).
-- Assign using SET
SET @CustomerName = 'Alice';
-- Assign using SELECT
SELECT @Age = 30;
Por exemplo, a consulta abaixo retorna a lista de clientes que moram em London usando uma variável em vez de fixar o valor no código.
-- 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 dados comuns
A seguir estão alguns tipos de dados do T‑SQL que também são comuns nos tipos de dados do SQL:
-
INT: números inteiros, por exemplo, 1, 100. -
VARCHAR(n): texto de tamanho variável, como nomes e e‑mails. -
DATETIME: valores de data e hora. -
DECIMAL(p, s): números de precisão fixa, como moedas.
Fluxo de controle no T-SQL (IF, WHILE, BEGIN...END)
Uma das vantagens do T‑SQL é permitir adicionar lógica de programação às suas consultas. Em vez de apenas recuperar dados, você controla como e quando o código executa. Veja abaixo alguns exemplos de fluxo de controle.
IF...ELSE (execução condicional)
A instrução IF permite executar um bloco de código apenas se determinada condição for verdadeira. Se for falsa, você pode usar ELSE para uma ação alternativa.
Por exemplo, a consulta abaixo conta o total de pedidos e imprime "High order volume" se for superior a 100, ou "Low order volume" se for inferior a 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
Loops WHILE (lógica iterativa)
O loop WHILE repete um bloco de código enquanto a condição for verdadeira. É útil para tarefas em "lotes" ou para gerar dados de teste.
A consulta abaixo inicia um contador em 1 e usa um loop para imprimir o número atual e incrementá-lo até chegar 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 (agrupando instruções)
O bloco BEGIN...END é usado para agrupar várias instruções em um único bloco, garantindo que todo o conjunto execute de forma atômica.
Por exemplo, a consulta abaixo vai imprimir tanto "Customers found in USA" quanto "Proceeding with operation". Sem BEGIN...END, apenas a primeira instrução após o IF seria executada.
IF EXISTS (SELECT 1 FROM Customers WHERE Country = 'USA')
BEGIN
PRINT 'Customers found in USA';
PRINT 'Proceeding with operation'; -- Both statements run together
END
Quando o fluxo de controle é útil?
O fluxo de controle em T‑SQL é comumente usado para:
- Automação: executar scripts agendados ou tarefas de manutenção
- Validação de dados: checar condições antes de inserir ou atualizar
- Processamento em lotes: tratar dados em etapas ou loops
- Lógica de negócios: aplicar regras diretamente no banco
Stored procedures no T-SQL
Uma stored procedure é uma coleção salva de instruções T‑SQL que você pode reutilizar quantas vezes quiser. Em vez de enviar um bloco enorme de código do seu aplicativo para o servidor toda vez, você salva o código no servidor e apenas chama o nome da procedure.
Stored procedures são úteis porque podem ser reaproveitadas muitas vezes. Os planos de execução pré‑compilados melhoram a eficiência e escondem lógicas complexas atrás de uma interface simples.
Por exemplo, esta stored procedure recupera o primeiro e o último nome de um cliente com base no ID informado.
-- 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;
Você pode executar a stored procedure com a consulta abaixo:
-- Calls the procedure
EXEC GetCustomerByID @CustomerID = 1; Obtenha uma das melhores certificações em SQL
Funções no T-SQL
O T‑SQL inclui funções nativas e funções definidas pelo usuário (UDFs) usadas para transformar dados.
Funções nativas
Essas funções já estão disponíveis no SQL Server e podem ser usadas diretamente nas consultas.
Função de string
Transforma dados do tipo texto. Por exemplo, a consulta abaixo recupera todos os primeiros nomes da tabela Customers e os converte para maiúsculas.
-- Converts text to uppercase
SELECT UPPER(FirstName)
FROM Customers;
Função de data
Transforma ou retorna informações de data. A consulta abaixo retorna a data e hora atuais do sistema.
-- Returns current date and time
SELECT GETDATE();
Função de agregação
São funções usadas para agregar valores de uma tabela. Por exemplo, a consulta abaixo conta o total de linhas (clientes) na tabela Customers.
-- Counts rows
SELECT COUNT(*) AS TotalCustomers
FROM Customers;
Funções definidas pelo usuário (UDFs)
Você também pode criar suas próprias funções para reutilizar lógica em várias consultas.
Função escalar
Uma função escalar retorna um único valor e é útil quando você precisa de um resultado calculado, como formatações ou contas. Na consulta abaixo, a função recebe nome e sobrenome e retorna o nome 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;
Funções com retorno de tabela
Funções com retorno de tabela devolvem uma tabela. Por exemplo, a função abaixo retorna uma tabela com todos os clientes do 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
);
Recomendo a nossa trilha de carreira completa SQL Server Developer, que vai te capacitar a criar, atualizar e executar stored procedures e também aprofundar em funções de agregação, joins, inserções, exclusões e muito mais.
Tratamento de erros no T-SQL
O T‑SQL usa blocos TRY...CATCH para lidar com erros sem interromper todo o script. Isso é essencial para evitar falhas inesperadas e permitir mensagens úteis para depuração ou registro.
Por exemplo, a consulta abaixo tenta executar um cálculo que gera erro, captura o erro e imprime uma mensagem legível em vez de encerrar o script.
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;
Transações no T-SQL
Uma transação garante que um conjunto de operações ou todas tenham sucesso ou todas falhem. Isso segue o princípio ACID, assegurando a consistência do banco mesmo se houver uma queda de energia no meio de uma atualização.
No exemplo abaixo, a transação transfere dinheiro entre contas e confirma as duas alterações juntas.
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
Se algo der errado, você pode usar ROLLBACK para desfazer a transação e restaurar os dados ao estado anterior.
-- Undo all changes made in the current transaction
ROLLBACK;
Transações em T‑SQL são importantes para garantir a integridade dos dados, especialmente em sistemas críticos, como aplicações financeiras, em que atualizações parciais podem gerar inconsistências.
Você pode fazer nossa trilha Transactions and Error Handling in SQL Server, que cobre transações e tratamento de erros no SQL Server.
Recursos comuns do T-SQL para análise de dados
O T‑SQL inclui ferramentas especialmente úteis para profissionais de dados. Vamos ver alguns exemplos e como aplicá-los na análise.
Funções de janela
Funções de janela fazem cálculos ao longo de linhas sem agrupá-las em um único resultado. São muito usadas para ranking, totais acumulados e análises avançadas.
No exemplo abaixo, a consulta atribui um número de linha único a cada cliente com base no CustomerID.
-- Assigns row numbers to customers
SELECT
FirstName,
ROW_NUMBER() OVER (ORDER BY CustomerID) AS RowNum -- Assigns row numbers
FROM Customers;
Na consulta:
-
ROW_NUMBER(): atribui números de linha únicos
-
RANK(): atribui ranking com lacunas em empates -
OVER(): define a janela (ordenação/particionamento)
Confira nosso SQL Window Functions Cheat Sheet para baixar e ter um guia de referência das várias funções de janela no SQL. E dê uma olhada no curso Intermediate SQL Server para aprender mais sobre o uso do T‑SQL em análise de dados, incluindo funções de janela para resumir informações.
Common table expressions (CTEs)
CTEs (Common Table Expressions) criam um conjunto de resultados temporário que você pode reutilizar dentro de uma consulta. A consulta abaixo cria uma lista temporária de clientes dos EUA e, em seguida, consulta esse conjunto.
-- Define a CTE
WITH CustomerCTE AS (
SELECT FirstName, Country
FROM Customers
WHERE Country = 'USA' -- Filter only USA customers
)
-- Query the CTE
SELECT *
FROM CustomerCTE;
Já as CTEs recursivas são um tipo especial que se referenciam dentro da própria definição, permitindo operações repetitivas. São ideais para trabalhar com dados hierárquicos, como organogramas.
Recomendo o curso Hierarchical and Recursive Queries in SQL Server para aprender a escrever consultas avançadas no SQL Server, incluindo CTEs e CTEs recursivas, com exemplos práticos.
Tabelas temporárias
Tabelas temporárias armazenam dados para uso de curto prazo durante uma sessão. São úteis para staging de dados, simplificar transformações em várias etapas ou melhorar a performance em consultas complexas.
Para demonstrar como funcionam no T‑SQL, veja os três blocos a seguir. O primeiro cria uma tabela temporária, o segundo preenche com dados de clientes e o terceiro consulta essa tabela na mesma sessão.
-- 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;
Importante: tabelas temporárias têm o prefixo # e são descartadas automaticamente quando a sessão termina.
T-SQL vs. outros dialetos de SQL
Todos os dialetos de SQL compartilham a mesma base, mas cada sistema de banco adiciona sua própria sintaxe e recursos. O T‑SQL é projetado especificamente para o Microsoft SQL Server, o que influencia como ele funciona e onde é melhor aplicado.
T-SQL vs. PostgreSQL (PL/pgSQL)
PostgreSQL usa PL/pgSQL para lógica procedural, semelhante ao T‑SQL, mas com sintaxe e pontos fortes diferentes. A tabela abaixo resume essas diferenças:
|
Categoria |
T-SQL (SQL Server) |
PostgreSQL (PL/pgSQL) |
|
Linguagem procedural |
Incorporada ao T‑SQL |
Usa PL/pgSQL |
|
Sintaxe de variável |
|
|
|
Nomeação de variáveis |
Usa prefixo |
Sem prefixo (por exemplo, |
|
Estrutura de bloco |
Mais simples, muitas vezes implícita ou |
Explícita: requer |
|
Bloco de exemplo |
Batch padrão do T‑SQL |
Envolto em |
|
Tipos de dados avançados |
Limitados |
Suporte nativo avançado (JSONB, arrays, geométricos) |
|
Ferramentas e integração |
Integração estreita com ferramentas do SQL Server |
Flexível entre plataformas |
|
Ecossistema |
Otimizado para Windows, Azure, SSMS e Power BI |
Open source, multiplataforma |
Confira a trilha de habilidades SQL for Database Administrators para aprender a projetar bancos relacionais e estruturar consultas para melhorar a performance.
T-SQL vs. MySQL
MySQL também oferece SQL procedural, mas com uma abordagem mais simples e limitada. A tabela abaixo compara diferenças de sintaxe e recursos entre os dois dialetos.
|
Categoria |
T-SQL (Microsoft) |
MySQL |
|
Limitação de linhas |
|
|
|
Tratamento de erros |
Blocos |
Sintaxe DECLARE HANDLER mais limitada |
|
Lógica procedural |
Rica, estruturada e altamente programável |
Recursos procedurais mais simples e limitados |
|
Análises |
Funções de janela e CTEs |
Funcionalidades analíticas básicas (melhorando nas versões mais novas) |
|
Ecossistema |
Vinculado ao SQL Server e ferramentas Enterprise |
Leve; coração do stack LAMP (Linux, Apache etc.) |
|
Melhor uso |
Lógica de negócios complexa e data warehousing |
Aplicações web e leituras em alta velocidade |
Casos de uso reais do T-SQL
O T‑SQL vai muito além de consultas simples. A seguir, alguns exemplos em que ele se mostrou útil na prática profissional.
Consultas para relatórios
T‑SQL é amplamente usado para gerar relatórios direto do banco. Por exemplo, você pode agregar vendas por região ou ranquear produtos de melhor desempenho usando funções de janela.
Processos ETL (Extract, Transform, Load)
Engenheiros de dados usam T‑SQL em pipelines para preparar e mover dados. Você pode extrair dados de tabelas de staging, transformar formatos, corrigir inconsistências e carregar tabelas finais de relatórios.
Scripts de limpeza de dados
Se seu banco tem milhões de linhas com endereços inconsistentes, um script em T‑SQL com WHILE ou CTEs ajuda a identificar duplicidades, preencher valores ausentes e padronizar formatos.
Lógica de back-end em aplicações
Muitas aplicações usam T‑SQL para lidar com regras de negócio dentro do banco. Você pode usar stored procedures para operações CRUD, validar antes de inserir dados ou aplicar transações para operações críticas.
Erros comuns e boas práticas
Embora o T‑SQL seja ótimo para consultas avançadas, é comum esbarrar em alguns problemas. Estes são erros frequentes que já encontrei ao usar T‑SQL:
-
Abusar de loops em vez de lógica baseada em conjuntos: usar loops, como
WHILE, para operações linha a linha pode degradar a performance. SQL foi feito para trabalhar com conjuntos de dados. -
Pouca atenção a índices: não usar índices corretamente pode deixar consultas lentas, principalmente em tabelas grandes.
-
Não usar transações adequadamente: executar várias operações relacionadas sem envolver em uma transação pode deixar os dados inconsistentes se algo falhar no meio do caminho.
-
Ignorar tratamento de erros: pular os blocos
TRY...CATCHdificulta a depuração e pode fazer scripts falharem silenciosamente em produção.
Boas práticas que recomendo para escrever consultas mais eficientes e confiáveis:
-
Prefira consultas baseadas em conjuntos: use
JOIN,GROUP BYe funções de janela em vez de loops sempre que possível. Isso se alinha à forma como o SQL Server processa dados com eficiência. -
Escreva código legível e sustentável: adote convenções claras de nomenclatura, formate as consultas de forma consistente e comente quando necessário. Isso facilita leitura, depuração e colaboração.
-
Teste suas procedures: sempre teste stored procedures e consultas com entradas variadas para garantir que funcionem corretamente e tratem casos extremos.
Conclusão
O T‑SQL estende o SQL padrão com recursos de programação, tornando‑o uma ferramenta flexível e poderosa para automação, processamento e análise de dados. Com variáveis, stored procedures e tratamento de erros, você constrói soluções de banco de dados mais dinâmicas e eficientes.
Como próximo passo, recomendo a trilha de carreira Associate Data Analyst em SQL para se tornar um analista de dados completo. Nosso curso Reporting in SQL também vai te ajudar a criar relatórios complexos. E, por fim, conquiste a SQL Associate Certification para mostrar domínio em SQL e se destacar no mercado.
T-SQL: perguntas frequentes
Como o T-SQL é diferente do SQL padrão?
SQL é basicamente declarativo, enquanto o T‑SQL combina consultas declaratórias com programação procedural, permitindo controlar como as operações são executadas.
Preciso aprender SQL antes de aprender T-SQL?
Sim, é importante ter noções de SQL, já que o T‑SQL se baseia diretamente em conceitos centrais como SELECT, INSERT, UPDATE e DELETE.
O T-SQL está disponível em todos os dialetos de SQL?
Não. O T‑SQL é específico do ecossistema da Microsoft e é usado principalmente com Microsoft SQL Server e ferramentas relacionadas como Azure SQL.
O que são stored procedures e por que são úteis?
Stored procedures são blocos reutilizáveis de código T‑SQL que rodam dentro do banco. Elas melhoram a performance, garantem consistência e simplificam a lógica das aplicações.
Para que servem as funções de janela no T-SQL?
Funções de janela são usadas para análises avançadas, como ranking, totais acumulados e comparações entre linhas, sem agrupar os dados.


