Como descobrir a quantidade de registros das tabelas de um banco de dados SQL Server
Nesta publicação do Web Mundi.com você vai aprender a listar quantos registros existem em cada tabela de um banco de dados SQL Server — incluindo a forma moderna e recomendada de fazer isso, já que o método clássico baseado em sys.sysindexes está obsoleto.
Já havíamos publicado outra dica do Web Mundi.com sobre o mesmo assunto. A query abaixo é mais curta e mais fácil de entender, mas merece alguns cuidados.
A query clássica (curta, porém obsoleta)
SELECT o.name AS Tabela, i.rowcnt AS Linhas
FROM (SELECT DISTINCT id, rowcnt FROM sys.sysindexes) i
INNER JOIN sys.objects o ON i.id = o.object_id
WHERE o.type = 'U'
ORDER BY i.rowcnt DESC;
(Adicionamos WHERE o.type = 'U' em relação ao exemplo original, para garantir que só tabelas de usuário sejam listadas, e não outros tipos de objeto que também aparecem em sys.objects.)
Atenção: sys.sysindexes é uma view de compatibilidade herdada de versões antigas do SQL Server (2000). A Microsoft recomenda não utilizá-la em scripts novos, e ela pode ser removida em versões futuras. Além disso, rowcnt pode ficar desatualizado logo após operações em massa, até que as estatísticas internas sejam atualizadas.
A forma recomendada — sys.dm_db_partition_stats
Esta é a DMV (Dynamic Management View) atual para esse tipo de informação, e é a forma recomendada pela Microsoft:
SELECT
s.name AS Schema_,
t.name AS Tabela,
SUM(p.row_count) AS Linhas
FROM sys.dm_db_partition_stats p
INNER JOIN sys.tables t ON p.object_id = t.object_id
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE p.index_id IN (0, 1) -- 0 = heap, 1 = índice clustered (evita contar a mesma linha várias vezes por causa de índices não-clustered)
GROUP BY s.name, t.name
ORDER BY Linhas DESC;
O filtro index_id IN (0, 1) é importante: sem ele, uma tabela com vários índices não-clustered teria sua contagem de linhas somada (e multiplicada) incorretamente, pois cada índice gera sua própria entrada em sys.dm_db_partition_stats.
Alternativa rápida para uma única tabela — sp_spaceused
Se você só precisa checar uma tabela específica (e de quebra já quer saber o espaço ocupado em disco), a procedure de sistema sp_spaceused resolve em uma linha:
EXEC sp_spaceused 'tbwebmundi';
Alternativa com COUNT(*) puro (mais lenta, porém sempre exata)
As opções acima usam metadados internos do SQL Server, que são muito rápidos mas podem estar levemente desatualizados em cenários de alta concorrência. Se você precisa de um número 100% exato no momento exato da consulta, a alternativa é gerar dinamicamente um COUNT(*) para cada tabela:
SELECT
s.name AS Schema_,
t.name AS Tabela,
'SELECT ''' + s.name + '.' + t.name + ''' AS Tabela, COUNT(*) AS Linhas FROM ' + s.name + '.' + t.name
FROM sys.tables t
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id;
Essa consulta gera o texto de um SELECT COUNT(*) para cada tabela do banco. Basta copiar o resultado e executar (ou automatizar com um cursor/sp_executesql) para obter a contagem exata, tabela por tabela.
Conclusão
Para uma visão geral rápida e para a maioria dos casos do dia a dia, sys.dm_db_partition_stats é hoje a forma recomendada — rápida, sem depender de views obsoletas, e sem custo de varrer cada tabela inteira. Já COUNT(*) continua sendo o caminho quando você precisa de precisão absoluta no exato momento da consulta, ao custo de ser mais lento em tabelas grandes.
Materiais e leituras que recomendamos para você:
- Instalação do SQL Server no Linux
- Instalação SQL Server 2017 Express + SSMS + Adventure Works
- Livros gratuitos sobre SQL Server
- Diferença entre Data Science, Business Intelligence e Big Data

Como Configurar o Tema escuro do SQL Server Management Studio : Vídeo Aula
Confira nossa outra dica de SQL Server do Canal Web Mundi.com do Youtube que ensina como configurar o tema negro no SSMS.
Obrigado
Esperamos que esta publicação tenha lhe ajudado a aprofundar seus conhecimentos no banco de dados Microsoft SQL Server.
Qual foi sua experiência trabalhando com SQL Server ?
Conte pra nós a sua experiência, adoraríamos saber.
Como entusiasta por banco de dados, queremos enriquecer sua experiência neste assunto.
Se você gostou deste post, compartilhe com seus amigos ou nos acompanhe pelas redes sociais.
Tem alguma opinião, sugestão, dúvida ou observação a fazer ?
Deixe seu comentário.
Além disso, você pode nos ajudar a criar mais conteúdos como este. Como ?
Prestigie nossos anunciantes conhecendo seus produtos e serviços.
É simples e rápido e assim você ajuda a gente a crescer.