Я думаю, вы неправильно понимаете, что на самом деле делает внешнее соединение / где комбинация. Внешнее соединение (левое или правое) возвращает данные на одной стороне, даже если данные не существуют на другой. Ничто из того, что вы делаете с данными, которых не существует ни с одной стороны, не появляется в наборе результатов. Если вам нужно что-то, чего на самом деле не существует, вам нужно представить его. Я не могу думать о какой-либо цели, стоящей за этим, вы можете получить то, что вы хотите, следующим образом:
with np (id, name, value) as
(select id, name, value
from node_properties
union
-- bike must appear in the output so generate a row if it doesn't exist.
select null, 'bike', null
where not exists
(select null
from node_properties
where name = 'bike'
)
)
select n.id node_id
, n.name node_name
, np.name properties_name
, np.value properties_value
from np
left join nodes n on np.id = n.id
order by n.id nulls first;