Ho lottato sullo stesso problema e "la sintassi di mysql non è standard" non è un argomento valido secondo me. PostgreSQL aggiunge anche utili estensioni non standard, ad esempio "INSERT ... RETURNING ..." per ottenere ID automatici dopo gli inserimenti. Inoltre, ripetere query di grandi dimensioni non è una soluzione elegante.
Tuttavia, ho trovato molto utile la dichiarazione WITH (CTE). Crea una sorta di vista temporanea all'interno della query che puoi utilizzare come una normale tabella. Non sono sicuro di aver riscritto correttamente il tuo JOIN, ma in generale dovrebbe funzionare così:
WITH jobs_refined AS (
SELECT
jobs.*,
(SELECT CASE WHEN lead_informations.state IS NOT NULL THEN lead_informations.state ELSE 'NEW' END) AS lead_state
FROM jobs
LEFT JOIN lead_informations
ON lead_informations.job_id = jobs.id
AND lead_informations.mechanic_id = 3
)
SELECT *
FROM jobs_refined
WHERE lead_state = 'NEW'