Isso responde à pergunta original.
Você não precisa das
tags
nem os users
tabela para sua consulta, para que possa ser muito simplificada. DISTINCT
não é permitido com JSON_AGG()
. Mas você pode usar uma subconsulta: SELECT b.user_id, JSON_ARRAYAGG( b.tag_id) AS tags
FROM (SELECT DISTINCT b.user_id, bt.tag_id
FROM bookmark_tag bt JOIN
bookmark b
ON b.id = bt.bookmark_id
) b
GROUP BY b.user_id;
Aqui é um db<>fiddle.