Ho testato la sottoquery di @Abdullah e in effetti ho ottenuto l'opposto di quello che volevo. Dopo un piccolo test ho finito con le query nidificate che mi danno quello che stavo cercando:
select distinct entity_id from construction
where entity_id not in (
select entity_id from construction c left outer join available a on a.id = c.component_id
where a.id is null
);