En este caso debes agregar la condición a la parte de la UNION entre tablas (ON ...)
De esta forma hace el JOIN y como es de tipo LEFT no importa que no tenga datos...
Algo así... pero tendrías que utilizar un LEFT JOIN para RESULTADOS porque filtras por mesas que estén en la circunscripcion.
Código SQL
[-]
select a.codigo, a.nombre, coalesce(sum(b.votos), 0) votos, coalesce(c.electos, 0) electos, c.circunscripcion,
d.nombre
from partidos a, resultados b, poblacion d
left join numelectos c on b.codprv = c.codprv and b.proceso = c.proceso and c.tipo = 'M' and b.partido = c.partido and d.codigo = c.circunscripcion
where
a.codprv = : prvins and
b.proceso = : proceso and
a.codprv = b.codprv and
b.partido = a.codigo and
b.mesa in (select codigo
from mesas
where
codprv = a.codprv and
municipio = c.circunscripcion) and
a.codprv = d.codprv
group by a.codigo, a.nombre, electos, c.circunscripcion, d.nombre
order by d.nombre, votos desc, electos desc, a.nombre
Yo te recomentadría utilizar JOIN / LEFT JOIN para unir las 4 tablas y no mezclar diferentes formas de hacerlo.