Een andere optie kan zijn array_remove(..., NULL) (geïntroduceerd in 9.3
) als tags.tag is NOT NULL (anders wil je misschien NULL behouden waarden in de array, maar in dat geval kunt u geen onderscheid maken tussen een enkele bestaande NULL tag en een NULL tag vanwege de LEFT JOIN ):
SELECT objects.*,
array_remove(array_agg(tags.tag), NULL) AS tags,
FROM objects
LEFT JOIN taggings ON objects.id = taggings.object_id
LEFT JOIN tags ON tags.id = taggings.tag_id
Als er geen tags worden gevonden, wordt een lege array geretourneerd.