Я бы попробовал с NOT EXISTS
:
select coalesce(sum(a.col_a), 0)
from table_a a
where not exists (select 1 from table_b b where b.tid = a.tid and b.col_b = 13);
Кроме того, агрегирование также было бы полезно:
select coalesce(sum(a.col_a), 0)
from table_a a inner join
table_b b
on b.tid = a.tid
group by a.tid
having count(*) filter (where b.col_b = 13) = 0;
Еще один вариант - использовать left join
:
select coalesce(sum(a.col_a), 0)
from table_a a left join
table_b b
on b.tid = a.tid and b.col_b = 13
where b.tid is null;
Для оптимальной производительности, индекс будет полезным table_a(tid, col_a)
, table_b(tid, col_b)