Frank van Vugt <ftm.van.vugt@xxxxxxx> writes: > db=# explain analyse > select sum(base_total_val) > from sales_invoice > where id in (select id from si_credit_tree(80500007)); Did you check whether this query even gives the right answer? The EXPLAIN output shows that 21703 rows of sales_invoice are being selected, which is a whole lot different than the other behavior. I think you forgot the alias foo(id) in the subselect and it's actually reducing to "where id in (id)", ie, TRUE. regards, tom lane