Por causa de:
Seq Scan on invoices (...) (actual ... rows=118027 <— this
Filter: (account_id = 1)
Rows Removed by Filter: 51462 <— vs this
Total runtime: 39.917 ms
Você está selecionando tantas linhas que fica mais barato ler a tabela inteira.
Perguntas e respostas anteriores relacionadas de hoje para leitura adicional:
-
Por que o Postgresql não usa o índice para a consulta IN?
-
Postgres usando índice errado ao consultar uma exibição de expressões indexadas?
(Veja também a resposta mais longa de Craig na segunda para notas adicionais sobre sutilezas de índices.)