Strasmore Research
Aprendizado Matt ConnorPor Matt Connor

Retorno de preço vs retorno total: diferença real

Retorno de preço vs. retorno total: o índice headline do S&P 500 exclui dividendos. Compare a diferença em vinte anos e saiba quando usar cada versão.

O retorno pelo preço e o retorno total mostram a diferença entre o que um gráfico de mercado apresenta e o que alguém que manteve a mesma posição efetivamente ganhou. O retorno pelo preço considera apenas a variação da cotação. O retorno total acrescenta todos os dividendos, reinvestidos ao preço do dia em que a ação fica ex-dividendo. Assim, cada pagamento pode capitalizar junto com as ações que o geraram.

O nível do S&P 500 normalmente divulgado nas notícias é um índice de preços. A sua versão de retorno total mantém as mesmas empresas e reinveste os dividendos. Em um único ano, os dois indicadores parecem quase idênticos. Em vinte anos, mostram resultados muito diferentes, e a distância entre eles é maior do que o rendimento anual sugeriria.

Qual é a diferença entre retorno de preço e retorno total?

Retorno de preço é o preço final dividido pelo preço inicial, menos um. Todo nível de índice divulgado na televisão e todo gráfico de preços que você já consultou mostram esse número.

Retorno total faz o mesmo cálculo, mas usa cada dividendo em dinheiro para comprar mais ações ao preço da data ex-dividendo. As tabelas de desempenho dos fundos e os índices de referência usados para avaliá-los adotam essa versão.

Um exemplo hipotético torna a mecânica concreta. Compre uma ação por US$ 100, que pague US$ 2 por ano, e venda-a um ano depois por US$ 105. O retorno de preço é de 5%. O retorno total é de aproximadamente 7%. O primeiro ano não tem nada de extraordinário. É a capitalização que justifica uma página própria: os US$ 2 reinvestidos compram uma fração de outra ação, essa fração recebe o seu próprio dividendo no ano seguinte, e as duas séries se afastam a uma taxa cada vez maior.

Uma distinção antes dos dados. Um total return swap é um contrato derivativo no qual uma das partes repassa toda a exposição econômica a um ativo em troca de uma taxa de financiamento. Ele compartilha apenas o nome com a convenção de índices explicada abaixo. O restante desta página trata de índices e fundos.

Qual é o tamanho da diferença no S&P 500?

US$ 10.000 investidos no maior ETF que acompanha o S&P 500 no fim de 2005, mantidos até 31 de julho de 2026. A primeira linha gasta cada dividendo no dia em que ele é recebido. A segunda reinveste cada dividendo ao preço de fechamento daquele dia.

Query$10.000 no ETF do S&P 500: apenas preço vs dividendos reinvestidos, do fim de 2006 a julho de 2026
O SQL exato por trás de cada número
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMax(toFloat64(close), window_start) AS close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2005-12-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY d
),
base AS (
    SELECT argMax(close, d) AS start_px
    FROM daily
    WHERE d <= toDate('2005-12-31')
),
year_end AS (
    SELECT toYear(d) AS year,
           argMax(close, d) AS close,
           max(d) AS last_day
    FROM daily
    WHERE d >= toDate('2006-01-01')
    GROUP BY year
),
reinvest AS (
    SELECT dv.ex_dividend_date AS d,
           log(1 + toFloat64(dv.cash_amount) / dl.close) AS log_growth
    FROM global_markets.stocks_dividends AS dv
    INNER JOIN daily AS dl ON dl.d = dv.ex_dividend_date
    WHERE dv.ticker = 'SPY'
      AND dv.cash_amount > 0
      AND dv.ex_dividend_date >= toDate('2006-01-01')
      AND dv.ex_dividend_date <= toDate('2026-07-31')
)
SELECT ye.year AS year,
       round(10000 * ye.close / any(b.start_px)) AS price_only_usd,
       round(10000 * ye.close / any(b.start_px) * exp(sum(ri.log_growth))) AS reinvested_usd,
       round(100 * (1 - exp(-sum(ri.log_growth))), 1) AS dividend_share_pct
FROM year_end AS ye, reinvest AS ri, base AS b
WHERE ri.d <= ye.last_day
GROUP BY ye.year, ye.close
ORDER BY year
Run this yourself

A linha que considera apenas o preço termina em US$ 59956. A linha com reinvestimento termina em US$ 85775. Os dividendos representam 30.1% desse saldo final, e nenhum deles aparece em um gráfico de preços.

É na borda esquerda do gráfico que esse efeito costuma passar despercebido. No fim de 2007, as duas linhas estavam em US$ 11755 e US$ 11971, e os dividendos representavam 1.8% do saldo. Uma diferença tão pequena no primeiro ano pode ser facilmente tratada como mero arredondamento. Vinte anos do mesmo arredondamento, cada um capitalizando sobre o anterior, produzem o spread na borda direita.

A diferença continua a aumentar com o tempo?

Mesmo fundo, mesma data final, cinco datas de início diferentes.

QueryRetorno de preço vs retorno total por período de manutenção: ETF do S&P 500, janelas encerradas em 31 de julho de 2026
O SQL exato por trás de cada número
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMax(toFloat64(close), window_start) AS close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2006-07-31')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY d
),
spans AS (
    SELECT y AS years,
           concat(toString(y), '-year') AS horizon,
           subtractYears(toDate('2026-07-31'), y) AS start_date
    FROM (SELECT arrayJoin([1, 3, 5, 10, 20]) AS y)
),
divs AS (
    SELECT dv.ex_dividend_date AS d,
           log(1 + toFloat64(dv.cash_amount) / dl.close) AS log_growth
    FROM global_markets.stocks_dividends AS dv
    INNER JOIN daily AS dl ON dl.d = dv.ex_dividend_date
    WHERE dv.ticker = 'SPY'
      AND dv.cash_amount > 0
      AND dv.ex_dividend_date <= toDate('2026-07-31')
),
endpoints AS (
    SELECT s.horizon AS horizon,
           s.years AS years,
           argMin(dl.close, dl.d) AS start_px,
           argMax(dl.close, dl.d) AS end_px
    FROM spans AS s, daily AS dl
    WHERE dl.d >= s.start_date
    GROUP BY s.horizon, s.years
),
reinvest AS (
    SELECT s.years AS years,
           exp(sum(dvs.log_growth)) AS factor
    FROM spans AS s, divs AS dvs
    WHERE dvs.d > s.start_date
    GROUP BY s.years
)
SELECT e.horizon AS horizon,
       round(100 * (e.end_px / e.start_px - 1), 1) AS price_return_pct,
       round(100 * (e.end_px / e.start_px * r.factor - 1), 1) AS total_return_pct,
       round(100 * (e.end_px / e.start_px) * (r.factor - 1), 1) AS dividend_points_pct
FROM endpoints AS e
INNER JOIN reinvest AS r ON e.years = r.years
ORDER BY e.years
Run this yourself

No período de 1-year, o retorno de preço foi de 18.2%, contra um retorno total de 19.5%. A diferença foi de 1.3 pontos percentuais. O período de 10-year separa 244.3% de 304.5%, uma diferença de 60.2 pontos. No período de 20-year, os dois resultados foram 485% e 736.9%: uma diferença de 251.9 pontos percentuais.

A curva não sobe em linha reta. Ela evolui como o saldo, porque cada dividendo reinvestido é incorporado à base sobre a qual o próximo dividendo é composto.

Por que um ano de dividendos parece irrelevante

Aqui está cada ano civil da mesma janela, dividido entre a variação do preço e a contribuição dos dividendos.

QueryETF do S&P 500 por ano-calendário: retorno de preço vs pontos adicionados por dividendos reinvestidos
O SQL exato por trás de cada número
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMax(toFloat64(close), window_start) AS close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2006-01-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY d
),
yearly AS (
    SELECT toYear(d) AS year,
           argMin(close, d) AS first_px,
           argMax(close, d) AS last_px
    FROM daily
    GROUP BY year
),
divs AS (
    SELECT toYear(dv.ex_dividend_date) AS year,
           exp(sum(log(1 + toFloat64(dv.cash_amount) / dl.close))) AS factor
    FROM global_markets.stocks_dividends AS dv
    INNER JOIN daily AS dl ON dl.d = dv.ex_dividend_date
    WHERE dv.ticker = 'SPY'
      AND dv.cash_amount > 0
    GROUP BY year
)
SELECT y.year AS year,
       round(100 * (y.last_px / y.first_px - 1), 1) AS price_return_pct,
       round(100 * (y.last_px / y.first_px) * (d.factor - 1), 2) AS dividend_points_pct
FROM yearly AS y
INNER JOIN divs AS d ON y.year = d.year
ORDER BY year
Run this yourself

Leia as duas séries em conjunto. A linha do preço é a mais ruidosa, com fortes oscilações nas duas direções. A linha dos dividendos é discreta: 1.9 pontos em 2007, 0.58 pontos no ano parcial até julho 2026 e nunca é o destaque nos demais períodos. Nenhuma linha isolada desse painel mudaria a opinião de alguém sobre qualquer assunto. Acumulados e capitalizados ao longo de 20 linhas, esses mesmos números pequenos representam toda a distância entre as duas linhas do primeiro gráfico. Reinvestir um dividendo também equivale a comprar automaticamente ao preço vigente naquele dia, algo muito próximo de aportes periódicos. É pelo mesmo motivo que o dividend yield do S&P 500 aparece como um número modesto, embora tenha um efeito muito maior em janelas longas do que o seu tamanho sugere.

Quais ações mostram a maior diferença?

A diferença acompanha o yield: uma empresa que devolve mais por dólar de preço oferece ao acionista mais recursos para reinvestir. A seleção reúne sete nomes conhecidos no período de dez anos até 31 de julho de 2026, com os retornos anualizados para tornar os horizontes comparáveis.

QueryRetorno anualizado de preço vs retorno total em dez anos: sete empresas conhecidas, até 31 de julho de 2026
O SQL exato por trás de cada número
WITH daily AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMax(toFloat64(close), window_start) AS close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'KO', 'JNJ', 'XOM', 'PG', 'VZ', 'MSFT')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2016-08-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, d
),
px AS (
    SELECT ticker,
           argMin(close, d) AS start_px,
           argMax(close, d) AS end_px
    FROM daily
    GROUP BY ticker
),
divs AS (
    SELECT dv.ticker AS ticker,
           exp(sum(log(1 + toFloat64(dv.cash_amount) / dl.close))) AS factor
    FROM global_markets.stocks_dividends AS dv
    INNER JOIN daily AS dl ON dl.ticker = dv.ticker AND dl.d = dv.ex_dividend_date
    WHERE dv.ticker IN ('SPY', 'KO', 'JNJ', 'XOM', 'PG', 'VZ', 'MSFT')
      AND dv.cash_amount > 0
      AND dv.ex_dividend_date >= toDate('2016-08-01')
      AND dv.ex_dividend_date <= toDate('2026-07-31')
    GROUP BY dv.ticker
)
SELECT px.ticker AS ticker,
       round(100 * (pow(px.end_px / px.start_px, 0.1) - 1), 2) AS price_cagr_pct,
       round(100 * (pow(px.end_px / px.start_px * divs.factor, 0.1) - 1), 2) AS total_cagr_pct,
       round(100 * (pow(px.end_px / px.start_px * divs.factor, 0.1)
                    - pow(px.end_px / px.start_px, 0.1)), 2) AS dividend_points_pct
FROM px
INNER JOIN divs ON px.ticker = divs.ticker
ORDER BY dividend_points_pct DESC
Run this yourself

VZ apresenta a maior diferença anual entre os 7, de 5.46 pontos percentuais por ano: -1.51% anualizados considerando apenas a valorização do preço, contra 3.96% com os dividendos reinvestidos. MSFT aparece na menor diferença, de 1.53 pontos. Isso traz duas conclusões para quem compara gráficos. Um gráfico de preços subestima muito mais o desempenho de uma ação com yield elevado do que o de uma ação com yield baixo. Além disso, qualquer filtro que classifique os nomes pelo desempenho do preço penaliza silenciosamente os pagadores. O yield de dividendos por trás de cada um desses nomes é o que determina o tamanho da diferença.

Onde cada versão é usada

  • Benchmarks e fichas técnicas de fundos apresentam o retorno total. A expressão “Total Return Index”, o sufixo “TR” ou a observação “net dividends reinvested” nas notas de rodapé indicam que os dividendos estão incluídos.
  • A imprensa financeira e as telas de cotações usam o retorno de preço. “O S&P 500 fechou em alta de 0,4%” descreve uma variação de preço.
  • As abas de desempenho das corretoras normalmente mostram o retorno total da conta, porque o dinheiro efetivamente entrou nela. A coluna de ganho de uma posição individual costuma mostrar a variação de preço em relação ao cost basis, que não é o mesmo valor.
  • Backtests e análises de estratégias usam a versão fornecida pelo feed de dados do autor. Essa é a origem de muitos históricos de desempenho discretamente inflados.

O desalinhamento relevante ocorre quando o retorno total de um fundo é comparado com um índice de preço. O fundo recebe crédito pelos próprios dividendos, enquanto o benchmark não recebe crédito pelos seus. Isso dá ao fundo uma vantagem inicial equivalente a todo o fluxo de dividendos do índice. Na janela 20-year acima, esse erro de avaliação vale 251.9 pontos percentuais, e nenhum deles veio do gestor. A comparação correta coloca retorno total ao lado de retorno total. Como são medidos os retornos mensais apresenta o mesmo cálculo em base mensal, e perder os melhores dias mostra o que acontece com a linha de preços quando algumas sessões são retiradas dela.

Como estes números são calculados
  • Os preços são os fechamentos diários do pregão regular. Os dividendos são distribuições em dinheiro registradas, cada uma reinvestida ao preço de fechamento na respetiva data ex-dividendo, que é a convenção padrão para construir uma série de retorno total.
  • A janela vai de dezembro de 2005 a 31 de julho de 2026, período coberto pelo histórico de preços intradiários usado nestes painéis. Uma janela mais longa amplia ainda mais a diferença.
  • Um fundo que acompanha o índice representa o próprio índice. Por isso, as taxas e o efeito do caixa permanecem incluídos nestes números. O retorno de preço no ano-calendário é medido entre o primeiro fechamento do ano e o último, o que exclui a variação da primeira sessão.

FAQ: retorno de preço versus retorno total

O S&P 500 é um índice de preço ou um índice de retorno total?

O número de referência é um índice de preço: acompanha o valor de mercado dos componentes e ignora os dividendos. Existe também uma versão de retorno total do mesmo índice, que reinveste esses dividendos. Os benchmarks dos fundos geralmente usam a versão de retorno total, enquanto a cobertura jornalística geralmente cita a versão de preço.

Quanto os dividendos acrescentam ao retorno do S&P 500?

No período de 10-year encerrado em 31 de julho de 2026, o ETF usado aqui teve retorno de 244.3% com base no preço, contra 304.5% com os dividendos reinvestidos. Dentro de um único ano-calendário, a contribuição é muito menor, de cerca de 1.9 pontos em 2007.

Minha conta na corretora mostra o retorno de preço ou o retorno total?

Os dividendos em dinheiro entram na conta, portanto o saldo já os inclui. A coluna de ganho de uma posição geralmente compara o preço atual com o cost basis, o que representa apenas o retorno de preço. Os dois valores diferem exatamente pelos dividendos recebidos, a menos que um plano de reinvestimento tenha comprado mais ações ao longo do período.

Um total return swap é a mesma coisa que retorno total?

Não. Um total return swap é um contrato de derivativo bilateral que troca o resultado econômico completo de um ativo por uma taxa de financiamento. Retorno total, no sentido usado em índices, é uma convenção de mensuração de desempenho. A expressão semelhante aponta para a mesma ideia subjacente de preço mais renda, mas os dois conceitos não têm relação enquanto instrumentos.

Por que um fundo parece melhor quando comparado com um índice de preço?

O número divulgado pelo fundo inclui seus dividendos, enquanto um índice de preço exclui os seus. A comparação dá ao fundo uma vantagem inicial equivalente ao fluxo de dividendos do benchmark: 251.9 pontos percentuais no período de 20-year mencionado acima.


Todas as cifras aqui vêm de uma consulta armazenada e versionada, baseada em fechamentos diários e registros de dividendos divulgados. Abra qualquer painel para ler o SQL ou faça a mesma comparação entre retorno de preço e retorno total para um ticker que você acompanha no terminal Strasmore.

#total return#dividends#s&p 500#index funds#performance