PostgreSQL implementa FULL OUTER JOIN
con un hash o un merge join.
Per essere idoneo a tale adesione, la condizione di adesione deve avere il modulo
<expression using only left table> <operator> <expression using only right table>
Ora la tua condizione di adesione fa assomiglia a questo, ma PostgreSQL non ha uno speciale IS NOT DISTINCT FROM
operatore, quindi analizza la tua condizione in:
(NOT ($1 IS DISTINCT FROM $2))
E una tale espressione non può essere utilizzata per hash o merge join, da qui il messaggio di errore.
Posso pensare a un modo per aggirarlo:
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;
Funziona se <null>
non appare da nessuna parte nel value
colonne.