Como yo lo veo tienes dos posibles opciones:
Código:
SELECT
ufv.voluntario.vol_cod,
SUM(ifnull(ufv.voluntario.vol_depus, 0) - ifnull(ufv.voluntario.vol_retus, 0)) AS saldo_ufv,
saldos.voluntario.vol_cod,
SUM(ifnull(saldos.voluntario.vol_depus, 0) - ifnull(saldos.voluntario.vol_retus, 0)) AS saldo_us
FROM
ufv.voluntario INNER JOIN saldos.voluntario USING(vol_cod)
GROUP BY
ufv.voluntario.vol_cod AND
saldos.voluntario.vol_cod
HAVING
saldo_ufv >= 2796 AND
saldo_us >= 500;
Este sería el caso completo conforme al código enviado.
El tema, entonces es saber por qué ambas consultas funcionan por separado, pero no juntas.
Entonces debemos concluir que si cruzamos las tablas resultandes de ambas consultas, realizadas por separado, debería haber puntos de coincidencia:
Código:
SELECT *
FROM
(SELECT
ufv.voluntario.vol_cod AS VOL_COD,
SUM(ifnull(ufv.voluntario.vol_depus, 0) - ifnull(ufv.voluntario.vol_retus, 0)) AS saldo_ufv,
FROM
ufv.voluntario
GROUP BY
ufv.voluntario.vol_cod
HAVING
saldo_ufv >= 2796 ) AS Tabla1
INNER JOIN
(SELECT
saldos.voluntario.vol_cod as VOL_COD,
SUM(ifnull(saldos.voluntario.vol_depus, 0) - ifnull(saldos.voluntario.vol_retus, 0)) AS saldo_us
FROM
saldos.voluntario
GROUP BY
saldos.voluntario.vol_cod
HAVING
saldo_us >= 500) AS Tabla2
USING(VOL_COD)
WHERE
saldo_us >= 500 AND saldo_ufv >= 2796
;
Si no se produce una coincidencia de esta forma,
entonces es que ninguna tupla cumple con ambas condiciones a la vez.