PostgreSQL implementeert FULL OUTER JOIN
met ofwel een hash of een merge join.
Om in aanmerking te komen voor een dergelijke join, moet de join-voorwaarde de vorm hebben
<expression using only left table> <operator> <expression using only right table>
Nu uw deelnamevoorwaarde doet ziet er zo uit, maar PostgreSQL heeft geen speciale IS NOT DISTINCT FROM
operator, dus het ontleedt uw voorwaarde in:
(NOT ($1 IS DISTINCT FROM $2))
En een dergelijke uitdrukking kan niet worden gebruikt voor hash- of merge-joins, vandaar de foutmelding.
Ik kan een manier bedenken om er omheen te werken:
SELECT a_id, NULLIF(a_value, '<null>'),
b_id, NULLIF(b_value, '<null>')
FROM (SELECT id AS a_id,
COALESCE(value, '<null>') AS a_value
FROM a
) x
FULL JOIN
(SELECT id AS b_id,
COALESCE(value, '<null>') AS b_value
FROM b
) y
ON x.a_value = y.b_value;
Dat werkt als <null>
verschijnt nergens in de value
kolommen.