Prueba con lo siguiente y me dices qué tal te va:
Código PHP:
SELECT p.idestacion AS estacion, COUNT(p.idpuesto) AS puestos_libres
FROM puestos p
WHERE p.idestacion IN (SELECT m.idestacion FROM mantenimiento m WHERE m.idzona = (SELECT m.idzona FROM mantenimiento m WHERE m.idestacion = {$idestacion}))
AND p.estado = 0
GROUP BY p.idestacion
Buena suerte.