Como obter a lista de todas as tabelas de um banco de dados SQL Server
Neste artigo você vai aprender a listar todas as tabelas de um banco de dados SQL Server, incluindo variações úteis: filtrar por schema, contar linhas, ver o tamanho de cada tabela e a forma moderna e recomendada de fazer essa consulta.

Passo a passo
- Abra o SQL Server Management Studio (SSMS).
- No Object Explorer, selecione o banco de dados desejado (ou execute
USE NomeDoBanco;no início do script). - Execute a query desejada abaixo em uma nova janela de consulta.
Forma clássica (ainda funciona, mas está obsoleta)
SELECT name
FROM sysobjects
WHERE type = 'u'
ORDER BY name;
Essa query funciona em qualquer versão do SQL Server, mas sysobjects é uma view de compatibilidade herdada do SQL Server 2000. A Microsoft recomenda não usá-la em scripts novos, pois ela pode ser removida em versões futuras e não traz informações adicionais úteis (schema, datas de criação etc.).
Forma recomendada — sys.tables
SELECT name, create_date, modify_date
FROM sys.tables
ORDER BY name;
sys.tables é uma view de catálogo dedicada só a tabelas — mais clara do que filtrar sys.objects por tipo, e já traz metadados extras como data de criação e última modificação.
Incluindo o schema de cada tabela
Em bancos com múltiplos schemas, é importante saber a qual schema cada tabela pertence (evita confundir dbo.Clientes com vendas.Clientes, por exemplo):
SELECT s.name AS schema_name, t.name AS table_name, t.create_date
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
ORDER BY s.name, t.name;
Forma padrão ANSI (portável entre bancos de dados)
Se você precisa de uma consulta que funcione de forma parecida em outros SGBDs (MySQL, PostgreSQL etc.), use INFORMATION_SCHEMA:
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_SCHEMA, TABLE_NAME;
Extra: quantidade de linhas e tamanho de cada tabela
Uma dúvida comum logo depois de listar as tabelas é “quantas linhas cada uma tem” ou “quanto espaço cada uma ocupa”. A consulta abaixo responde as duas coisas de uma vez, usando as views internas de partição e alocação de espaço:
SELECT
s.name AS schema_name,
t.name AS table_name,
p.rows AS total_linhas,
CAST(ROUND(SUM(a.total_pages) * 8 / 1024.0, 2) AS DECIMAL(18,2)) AS tamanho_mb
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.partitions p ON t.object_id = p.object_id AND p.index_id IN (0,1)
JOIN sys.allocation_units a ON p.partition_id = a.container_id
GROUP BY s.name, t.name, p.rows
ORDER BY total_linhas DESC;
Buscando uma tabela específica pelo nome
SELECT s.name AS schema_name, t.name AS table_name
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE t.name LIKE '%Cliente%';
Conclusão
Listar tabelas é uma das tarefas mais básicas do dia a dia com SQL Server, mas vale a pena usar sys.tables (ou INFORMATION_SCHEMA.TABLES, se precisar de portabilidade) em vez da antiga sysobjects. Além de ser a forma recomendada atualmente, essas views de catálogo trazem metadados prontos — schema, datas, e integração fácil com outras views do sistema para obter contagem de linhas e tamanho ocupado.