16 de agosto de 2026

Miocardite e Pericardite no SNS (2019–2024): Tendências de Internamento e Reinternamentos Cardíacos em Jovens do Sexo Masculino

por Pedro Almeida Vieira

Entre 2019 e 2024, os internamentos por miocardite no SNS cresceram 30% no total, mas 66% no grupo dos 18–30 anos — com o pico em 2022, coincidindo com o período de vacinação em massa com vacinas de mRNA. A pericardite, pelo contrário, não exibiu qualquer sinal de crescimento neste grupo etário no mesmo período. A análise de coortes de jovens do sexo masculino com primeiro internamento por miocardite entre 2017 e 2022 revela que a taxa de reinternamento cardíaco nos anos seguintes foi consistentemente mais elevada na coorte de 2021 (11,8% em 3 anos) do que em qualquer coorte anterior ao período pandémico.

Contexto

A miocardite e a pericardite são inflamações do músculo cardíaco e do pericárdio, respectivamente, com etiologias diversas — infecciosas (sobretudo virais), auto-imunes e, mais recentemente, associadas a vacinas de mRNA contra a COVID-19. A partir de meados de 2021, vários sistemas de farmacovigilância internacionais identificaram um sinal de miocardite/pericardite em jovens do sexo masculino após vacinação com BNT162b2 (Pfizer/BioNTech) e mRNA-1273 (Moderna). Este relatório analisa os internamentos por estas duas patologias nos hospitais do SNS português entre 2019 e 2024, com foco no grupo etário dos 18 aos 30 anos, e estuda prospectivamente os reinternamentos cardíacos em coortes de jovens homens com primeiro internamento por miocardite entre 2017 e 2022.

544
Internamentos por miocardite em 2022 (pico do período)
vs. 378 em 2019 (+44%); no grupo 18–30 anos: 252 vs. 152 (+66%)
46,3%
Peso dos 18–30 anos nos internamentos por miocardite em 2022
vs. 40,2% em 2019 — quase metade de todos os casos neste ano
11,8%
Taxa de reinternamento cardíaco (coorte 2021, 3 anos)
vs. 4,5% na coorte de 2017 — mais do dobro

Internamentos anuais: Miocardite vs. Pericardite (2019–2024)

Internamentos anuais por Miocardite — total e grupo 18–30 anos

Fonte: BDMH/ACSS. Internamentos SNS (tipo_port_apr31='Int'). Diagnóstico principal: ICD-9 422x/4290; ICD-10 I40x/I41/I514.

Internamentos anuais por Pericardite — total e grupo 18–30 anos

Fonte: BDMH/ACSS. Internamentos SNS. Diagnóstico principal: ICD-9 420x/4231/4232; ICD-10 I30x/I310/I311/I32.

Contraste entre as duas patologias

O crescimento da miocardite no grupo 18–30 anos entre 2019 e 2022 (+66%) não tem paralelo na pericardite. Nesta última, o volume no grupo 18–30 anos em 2022 (135 casos) ficou mesmo abaixo do nível pré-pandémico de 2019 (140 casos), evidenciando que a recuperação observada no total da pericardite não é impulsionada pelo grupo etário jovem. A diferença de padrões entre as duas patologias é consistente com a literatura internacional, que identifica a miocardite — e não a pericardite — como o principal sinal associado às vacinas de mRNA em jovens do sexo masculino.

Evolução mensal da miocardite em homens com menos de 30 anos (2019–2024)

Internamentos mensais por miocardite — homens < 30 anos (2019–2024)

Apenas homens com menos de 30 anos. O aumento a partir de Julho de 2021 é visível e sustentado até 2022. Em 2023-2024 os valores permanecem acima do nível pré-pandémico.

Análise de coortes: reinternamentos cardíacos em jovens homens com miocardite

Identificaram-se todos os doentes do sexo masculino com menos de 30 anos cujo primeiro internamento por miocardite (diagnóstico principal) ocorreu entre 2017 e 2022, e seguiu-se prospectivamente cada coorte para contabilizar reinternamentos posteriores com diagnóstico principal incluído no sistema «Diseases of the circulatory system» (CCS/AHRQ). As coortes são mutuamente exclusivas: cada doente é contado apenas no ano do seu primeiro episódio. A ligação longitudinal é feita por identificador de utente pseudonimizado (n_ficticio_utente), fiável a partir de 2017 (<1% de episódios sem identificação).

Coortes 2017–2022: reinternamentos cardíacos subsequentes em homens < 30 anos com miocardite
CoorteJanela seguimentoDoentesCom reint. cardíaco% com reint.Média reint. (quem teve)MedianaMáx.
20173 anos (2018–2020)11254,5%1,0011
20183 anos (2019–2021)111109,0%1,4013
20193 anos (2020–2022)121108,3%1,5013
20203 anos (2021–2023)8367,2%1,3312
20213 anos (2022–2024)1531811,8%1,67112
2022 ⚠2 anos (2023–2024)221209,0%1,5515
2017 †7 anos (2018–2024)11287,1%1,0011

⚠ Coorte 2022: janela de apenas 2 anos (seguimento incompleto — os reinternamentos estão subestimados face às coortes anteriores). † Linha adicional com seguimento máximo disponível para a coorte 2017.

Taxa de reinternamento cardíaco por coorte (janelas comparáveis de 3 anos, excepto 2022)

A coorte de 2022 tem apenas 2 anos de seguimento (barra a transparência reduzida) — subestimação expectável. A coorte de 2021 regista a taxa mais elevada de todo o período com seguimento completo de 3 anos.

Distribuição do número de reinternamentos por doente

Em todas as coortes, a mediana é 1: a maioria dos doentes que regressa ao hospital fá-lo apenas uma vez. A média ligeiramente superior a 1 reflecte um pequeno número de casos com doença recorrente. O caso mais extremo é um doente da coorte de 2021 com 12 reinternamentos entre 2022 e 2024, todos com códigos de miocardite, cardiomiopatia ou pericardite — padrão clínico compatível com doença cardíaca inflamatória crónica recorrente, provavelmente com episódios de transferência entre serviços registados como internamentos distintos.

Distribuição do número de reinternamentos cardíacos por doente e por coorte
N.º reinternamentos201720182019202020212022 ⚠
0 (sem reinternamento)10710111177135201
1577<51615
221212
3–5123
6+1

Células nulas = zero casos. ⚠ Coorte 2022: apenas 2 anos de seguimento.

Efeito do alargamento do seguimento (coorte 2017)

A coorte de 2017 seguida por apenas 3 anos tinha uma taxa de reinternamento cardíaco de 4,5% (5 doentes em 112). Com o seguimento alargado até 2024 (7 anos), essa taxa sobe para 7,1% (8 doentes) — acrescentando apenas 3 doentes em mais 4 anos de observação. Isto indica que a maioria dos reinternamentos ocorre nos primeiros 3 anos após o episódio índice, o que confere robustez à comparação entre coortes com janelas de 3 anos.

Ressalvas e limitações

  1. Causalidade: os dados são estritamente observacionais. O aumento de miocardite em jovens do sexo masculino a partir de meados de 2021 é temporalmente coincidente com a vacinação em massa com vacinas de mRNA, mas não estabelece por si só causalidade. Uma maior sensibilização clínica e diagnóstica para esta patologia neste período poderá contribuir para o sinal observado.

  2. Diagnóstico principal: a análise restringe-se a episódios em que miocardite ou pericardite figuram como diagnóstico principal (campo d1). Casos em que estas patologias surgem como diagnóstico secundário não são captados, pelo que os números representam um limite inferior da incidência hospitalar.

  3. Grupo etário: o grupo «18–30 anos» inclui ambos os sexos nos totais gerais de internamento; a análise de coortes de reinternamento restringe-se a doentes do sexo masculino, conforme solicitado.

  4. Coorte 2020: o número reduzido de doentes (83 vs. ~110–120 nos anos adjacentes) reflecte o impacto da pandemia de COVID-19 nos internamentos por causas não-COVID durante 2020.

  5. Coorte 2022 (seguimento parcial): com apenas 2 anos de seguimento disponíveis na base de dados, a taxa de reinternamento desta coorte (9,0%) está certamente subestimada face às coortes com 3 anos de janela. Não deve ser comparada directamente com as coortes 2017–2021 sem esta ressalva.

  6. Ligação longitudinal: a ligação por n_ficticio_utente é fiável a partir de 2017 (<1% de episódios sem identificação). Reinternamentos ocorridos fora do SNS (sector privado) não são captados.

Metodologia

Fonte de dados: Base de Dados de Morbilidade Hospitalar (BDMH), ACSS, episódios de internamento SNS 2017–2024 (38,5 milhões de episódios totais na base).

Filtros aplicados:

  • Tipo de produção: internamento (tipo_port_apr31 = 'Int')
  • Anos: 2019–2024 para análise de tendências; 2017–2024 para análise de coortes
  • Diagnóstico principal (campo d1):
    • Miocardite: ICD-9 422x, 4290; ICD-10 I40x, I41, I514
    • Pericardite: ICD-9 420x, 4231, 4232; ICD-10 I30x, I310, I311, I32
  • Coortes de reinternamento: sexo masculino (sexo = 1), idade < 30 anos à data de entrada, identificador de utente válido e não-sentinela

Definição de reinternamento cardíaco: episódio de internamento posterior à data de alta do episódio índice, com diagnóstico principal classificado no sistema CCS «Diseases of the circulatory system» (AHRQ Clinical Classifications Software, harmonizado para ICD-9 e ICD-10).

Coortes: cada doente é atribuído ao ano do seu primeiro internamento por miocardite no período 2017–2022; as coortes são mutuamente exclusivas. A janela de seguimento é de 3 anos civis para as coortes 2017–2021 e de 2 anos civis para a coorte 2022.

Quebras de série: o período 2020 deve ser interpretado com cautela devido ao impacto da pandemia de COVID-19 nos volumes de internamento. Não existem quebras de definição de internamento neste período (a quebra de 2013 não afecta os anos aqui analisados).

Codificação ICD: ICD-10-CM/PCS a partir de 2017 (com 5,6% de episódios de 2016 já em ICD-10); o campo icd_versao identifica o sistema por episódio.

Reprodutibilidade: consultas SQL utilizadas (4)

Totais anuais miocardite e pericardite (total e 18-30 anos), 2019-2024

SELECT ano, SUM(CASE WHEN patologia = 'Miocardite' THEN 1 END) AS mio_total, SUM(CASE WHEN patologia = 'Miocardite' AND idade BETWEEN 18 AND 30 THEN 1 END) AS mio_18_30, SUM(CASE WHEN patologia = 'Pericardite' THEN 1 END) AS peri_total, SUM(CASE WHEN patologia = 'Pericardite' AND idade BETWEEN 18 AND 30 THEN 1 END) AS peri_18_30 FROM (SELECT ano, idade, CASE WHEN icd_versao = '9' AND (d1 LIKE '422%' OR d1 = '4290') THEN 'Miocardite' WHEN icd_versao = '10' AND (d1 LIKE 'I40%' OR d1 = 'I41' OR d1 = 'I514') THEN 'Miocardite' WHEN icd_versao = '9' AND (d1 LIKE '420%' OR d1 = '4231' OR d1 = '4232') THEN 'Pericardite' WHEN icd_versao = '10' AND (d1 LIKE 'I30%' OR d1 = 'I310' OR d1 = 'I311' OR d1 = 'I32') THEN 'Pericardite' END AS patologia FROM episodes WHERE ano BETWEEN 2019 AND 2024 AND tipo_port_apr31 = 'Int' AND ((icd_versao = '9' AND (d1 LIKE '422%' OR d1 = '4290' OR d1 LIKE '420%' OR d1 = '4231' OR d1 = '4232')) OR (icd_versao = '10' AND (d1 LIKE 'I40%' OR d1 = 'I41' OR d1 = 'I514' OR d1 LIKE 'I30%' OR d1 = 'I310' OR d1 = 'I311' OR d1 = 'I32')))) x GROUP BY ano ORDER BY ano

Internamentos mensais miocardite, homens <30 anos e total, 2019-2024

SELECT ano, MONTH(data_entrada) AS mes, COUNT(*) FILTER (WHERE sexo = 1 AND idade < 30) AS n_h_lt30, COUNT(*) AS n_total FROM episodes WHERE ano BETWEEN 2019 AND 2024 AND tipo_port_apr31 = 'Int' AND ((icd_versao = '9' AND (d1 LIKE '422%' OR d1 = '4290')) OR (icd_versao = '10' AND (d1 LIKE 'I40%' OR d1 = 'I41' OR d1 = 'I514'))) GROUP BY ano, mes ORDER BY ano, mes

Coortes 2017-2022: reinternamentos cardíacos subsequentes (3 anos para 2017-2021, 2 anos para 2022)

WITH episodios_mio AS (SELECT n_ficticio_utente, ano, data_entrada, data_saida FROM episodes WHERE ano BETWEEN 2017 AND 2024 AND tipo_port_apr31 = 'Int' AND sexo = 1 AND idade < 30 AND n_ficticio_utente IS NOT NULL AND n_ficticio_utente NOT IN (SELECT n_ficticio_utente FROM sentinel_patient_ids) AND ((icd_versao = '9' AND (d1 LIKE '422%' OR d1 = '4290')) OR (icd_versao = '10' AND (d1 LIKE 'I40%' OR d1 = 'I41' OR d1 = 'I514')))), primeiro_mio AS (SELECT n_ficticio_utente, MIN(data_entrada) AS primeira_entrada, MIN(data_saida) AS primeira_saida, MIN(ano) AS ano_coorte FROM episodios_mio GROUP BY n_ficticio_utente), coorte AS (SELECT * FROM primeiro_mio WHERE ano_coorte BETWEEN 2017 AND 2022), reint AS (SELECT c.n_ficticio_utente, c.ano_coorte, COUNT(*) AS n_reint_card FROM coorte c JOIN episodes e ON e.n_ficticio_utente = c.n_ficticio_utente AND e.tipo_port_apr31 = 'Int' AND e.data_entrada > c.primeira_saida AND e.ano <= c.ano_coorte + CASE WHEN c.ano_coorte <= 2021 THEN 3 ELSE 2 END JOIN ccs cc ON cc.icd_versao = e.icd_versao AND cc.codigo = e.d1 AND cc.ccs_sistema = 'Diseases of the circulatory system' GROUP BY c.n_ficticio_utente, c.ano_coorte), base AS (SELECT c.n_ficticio_utente, c.ano_coorte, COALESCE(r.n_reint_card, 0) AS n_reint_card FROM coorte c LEFT JOIN reint r ON r.n_ficticio_utente = c.n_ficticio_utente AND r.ano_coorte = c.ano_coorte) SELECT ano_coorte, CASE WHEN ano_coorte <= 2021 THEN 3 ELSE 2 END AS janela_anos, COUNT(*) AS total_doentes, COUNT(*) FILTER (WHERE n_reint_card > 0) AS com_reint_card, ROUND(100.0 * COUNT(*) FILTER (WHERE n_reint_card > 0) / COUNT(*), 1) AS pct_com_reint, ROUND(AVG(n_reint_card) FILTER (WHERE n_reint_card > 0), 2) AS media_reint, MEDIAN(CASE WHEN n_reint_card > 0 THEN n_reint_card END) AS mediana_reint, MAX(n_reint_card) AS max_reint FROM base GROUP BY ano_coorte ORDER BY ano_coorte

Coorte 2017 com seguimento completo até 2024

WITH episodios_mio AS (SELECT n_ficticio_utente, ano, data_entrada, data_saida FROM episodes WHERE ano BETWEEN 2017 AND 2024 AND tipo_port_apr31 = 'Int' AND sexo = 1 AND idade < 30 AND n_ficticio_utente IS NOT NULL AND n_ficticio_utente NOT IN (SELECT n_ficticio_utente FROM sentinel_patient_ids) AND ((icd_versao = '9' AND (d1 LIKE '422%' OR d1 = '4290')) OR (icd_versao = '10' AND (d1 LIKE 'I40%' OR d1 = 'I41' OR d1 = 'I514')))), primeiro_mio AS (SELECT n_ficticio_utente, MIN(data_entrada) AS primeira_entrada, MIN(data_saida) AS primeira_saida, MIN(ano) AS ano_coorte FROM episodios_mio GROUP BY n_ficticio_utente), coorte_2017 AS (SELECT * FROM primeiro_mio WHERE ano_coorte = 2017), reint_total AS (SELECT c.n_ficticio_utente, COUNT(*) AS n_reint_card FROM coorte_2017 c JOIN episodes e ON e.n_ficticio_utente = c.n_ficticio_utente AND e.tipo_port_apr31 = 'Int' AND e.data_entrada > c.primeira_saida JOIN ccs cc ON cc.icd_versao = e.icd_versao AND cc.codigo = e.d1 AND cc.ccs_sistema = 'Diseases of the circulatory system' GROUP BY c.n_ficticio_utente), base AS (SELECT c.n_ficticio_utente, COALESCE(r.n_reint_card, 0) AS n_reint_card FROM coorte_2017 c LEFT JOIN reint_total r USING (n_ficticio_utente)) SELECT COUNT(*) AS total_doentes, COUNT(*) FILTER (WHERE n_reint_card > 0) AS com_reint_card, ROUND(100.0 * COUNT(*) FILTER (WHERE n_reint_card > 0) / COUNT(*), 1) AS pct_com_reint, ROUND(AVG(n_reint_card) FILTER (WHERE n_reint_card > 0), 2) AS media_reint, MEDIAN(CASE WHEN n_reint_card > 0 THEN n_reint_card END) AS mediana_reint, MAX(n_reint_card) AS max_reint FROM base

O jornalismo independente (só) depende dos leitores.

Não dependemos de grupos económicos nem do Estado. Não fazemos fretes. Fazemos jornalismo para os leitores, mas só sobreviveremos com o seu apoio financeiro.