Ecco la SQL della query che ho fatto secondo il tuo suggerimento
SELECT Personale.ID, Personale.Cognome, Personale.Nome, Mansioni.DESCRIZIONE, [Storico Persona vs Mansioni].[Data incarico], [Storico Persona vs Mansioni].[Data revoca incarico], [Storico Mansioni vs grado di rischio].[Data associazione], [Storico Mansioni vs grado di rischio].[Data fine associazione], [Moduli di formazione].[Titolo modulo], Max([Grado rischio e valore associato].Valore) AS MaxDiValore
FROM ((Personale INNER JOIN ((Mansioni INNER JOIN [Storico Mansioni vs grado di rischio] ON Mansioni.Id = [Storico Mansioni vs grado di rischio].[Id mansione]) INNER JOIN [Storico Persona vs Mansioni] ON Mansioni.Id = [Storico Persona vs Mansioni].[Id Mansione]) ON Personale.ID = [Storico Persona vs Mansioni].[Id Personale]) INNER JOIN [Grado rischio e valore associato] ON [Storico Mansioni vs grado di rischio].[Id Grado rischio] = [Grado rischio e valore associato].ID) INNER JOIN ([Moduli di formazione] INNER JOIN [Moduli vs per grado rischio mansione] ON [Moduli di formazione].ID = [Moduli vs per grado rischio mansione].[Id Modulo]) ON [Grado rischio e valore associato].ID = [Moduli vs per grado rischio mansione].[Id Grado rischio]
GROUP BY Personale.ID, Personale.Cognome, Personale.Nome, Mansioni.DESCRIZIONE, [Storico Persona vs Mansioni].[Data incarico], [Storico Persona vs Mansioni].[Data revoca incarico], [Storico Mansioni vs grado di rischio].[Data associazione], [Storico Mansioni vs grado di rischio].[Data fine associazione], [Moduli di formazione].[Titolo modulo];
Come vedi mi ripete le righe anche delle mansioni con un grado basso. Dove sbaglio?