PostgreSQL implementa
FULL OUTER JOIN
com um hash ou uma junção de mesclagem. Para ser elegível para tal associação, a condição de associação deve ter o formulário
<expression using only left table> <operator> <expression using only right table>
Agora sua condição de associação não se parece com isso, mas o PostgreSQL não tem um
IS NOT DISTINCT FROM
especial operador, então ele analisa sua condição em:(NOT ($1 IS DISTINCT FROM $2))
E essa expressão não pode ser usada para junções de hash ou mesclagem, daí a mensagem de erro.
Eu posso pensar em uma maneira de contornar isso:
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;
Isso funciona se
<null>
não aparece em nenhum lugar no value
colunas.