Innanzitutto ti consiglio sempre di indentare molto bene query complesse come questa per riuscire a capire bene tutte le parti dell'espressione:
Non so per risultato esatto cosa intendi, perchè non sapendo i dati non so cosa ti aspetti da questa query, quello che sicuramente succede è che la sub-query verrà valutata e ritornerà tutte le righe che rispecchiano questa clausola:
cartella_sanitaria.PartitaIva = '02770830236'
And Year(cartella_sanitaria.Data_Visita) = 2014
And paziente_azienda.Sede_Operativa = 'FA77D21B-D803-412A-B8D7-CE0B7F649C75'
And paziente.Sesso = 'M'
And esame_clinico_generale_cartella.PA Between 0 And 139
oppure questa
esame_clinico_generale_cartella.PA1 Between 0 And 89
quindi dato che la prima mi sembra molto selettiva, penserei che tutte le righe soddisfino la condizione "esame_clinico_generale_cartella.PA1 BETWEEN 0 AND 89"
un piccolo HINT: se devi solo contare le righe puoi mettere così:
SELECT COUNT(*) AS Nr_M
oppure SELECT COUNT(1) AS Nr_M
invece che:
SELECT COUNT(paziente.Sesso) AS Nr_M
questo evita al query engine di dovere valutare la colonna Sesso per niente, una piccolissima ottimizzazione, che però puoi tenere in considerazione: http://goo.gl/mQNUWM
Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic