Gracias Crowhuntt.
Había probado el COALESCE pero tampoco me ha funcionado.
Finalmente, el post que habla del union me ha dado una idea y he hecho
select cantidad from bi_t_produccion_cons_silos UNION ALL SELECT 0 FROM DUAL
y ese sí funciona.
El problema ahora es que la subconsulta devolvía 2 valores. Lo soluciono con un SUM
SELECT "SSCC","ID_OF","NUMERO_OF","ID_LOTE","LOTE",
(CANTIDAD - (SELECT sum(cantidad) cantidad FROM (SELECT SUM(cons.cantidad) cantidad FROM bi_t_produccion_cons_silos cons UNION ALL SELECT 0 FROM DUAL))) cantidad,
"FECHA_HORA","USUARIO","ESTADO","ID_INFORME","DESTINO","MARCA" FROM BI_V_PRODUCCION_LEIDO_SILO1 LEIDO
order by fecha_hora asc
a ver si lo puedo afinar para que sea uno u otro.