Ad un esame approfondito della query, sorgono delle domande :

1) Perchè usi HAVING ? E non piuttosto una condizione di WHERE ?
HAVING... was added to SQL because the WHERE keyword could not be used against aggregate functions (like SUM), and without HAVING... it would be impossible to test for result conditions.

The syntax for the HAVING function is:

SELECT column,SUM(column) FROM table
GROUP BY column
HAVING SUM(column) condition value
Tu non hai nessuna funzione di aggregazione all'interno della tua query

2) Perchè tutte quelle parentesi tonde ?
codice:
WHERE (((rata.datarata) Between #1/1/2005# And #12/31/2006#) AND ((rata.idrata) Not In (select idrata from fattura))) 

non potresti utilizzarla come :

WHERE (rata.datarata Between #1/1/2005# And #12/31/2006#)) AND    rata.idrata Not In (select idrata from fattura)
Ciao,