Questo risponde alla domanda originale.
Non hai bisogno né dei tags né gli users tabella per la tua query, quindi può essere molto semplificata.
DISTINCT non è consentito con JSON_AGG() . Ma puoi usare una sottoquery:
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;
Qui è un db<>violino.