Andiamo per gradi (Visto che siamo a fine anno mi dilungo .....)
Parto dal presupposto che nella tabella B ([sedeMaestranzeAnagrafica]) la chiave primaria sia il campo [IDCF] e che quindi hai una relazione 1 a 1 con la tabella A ([sedeMaestranze])
Alla fine tu selezioni un solo dipendente interessato con il CodiceFiscale
Devi sapere che la nostra Amministrazione non è riuscita neanche a darci un codice fiscale univoco ....
....
sembra quasi che lo fanno apposta a fare queste minchiate (perdonatemi l'espressione)
Poi tu per selezionare l'ultimo record relativo a un dipendente ti affidi al massimo numero di ID ....
certamente un progressivo e in teoria funziona,
ma nei DB reali ti potresti ritrovare in seguito a correzioni o altro un record successivo con un ID precedente
Valuta se non sia meglio usare la [sedeMaestranzeAssunzioni.DataInizio] al posto dell ID
... certo è meno performante, ma sei certo che la ultima data di assunzione e l'ultima
ed ora veniamo alla vista:
Un primo miglioramento (meglio dire correzione) devi farlo eliminando la 3° tabella (....LEFT JOIN sedeMaestranzeAssunzioni AS C....) dal JOIN
Tu filtri gia correttamente per ogni record della 3° tabella
se poi la lasci anche nel JOIN ottieni solo di moltiplicare i record .......
quindi:
SELECT A.ID, A.CF, A.Cognome, A.eccetera, B.ResidenzaVia, B.ResidenzaComune, B.eccetera,
(SELECT TOP (1) C1.DataInizio FROM dbo.sedeMaestranzeAssunzioni AS C1 WHERE (C1.IDCF = A.ID) ORDER BY ID DESC) AS Inizio,
(SELECT TOP (1) C2.DataFine FROM dbo.sedeMaestranzeAssunzioni AS C2 WHERE (C2.IDCF = A.ID) ORDER BY ID DESC) AS Fine,
(SELECT TOP (1) C3.Livello FROM dbo.sedeMaestranzeAssunzioni AS C3 WHERE (C3.IDCF = A.ID) ORDER BY ID DESC) AS Livello,
(eccetera ..................................) AS xxxx
FROM
dbo.sedeMaestranze AS A
LEFT OUTER JOIN
dbo.sedeMaestranzeAnagrafica AS B
ON A.ID = B.IDCF
WHERE (A.CF = 'XYZWQT55A20R123A')
;
ma secondo me sarebbe meglio evitare una sottoquery per ogni record bensi fare una unica sottoquery per la 3° tabella nel suo complesso
SELECT A.ID, A.CF, A.Cognome, A.eccetera, B.ResidenzaVia, B.ResidenzaComune, B.Eccetera, C.DataInizio, C.DataFine, C.Livello, C.eccetera
FROM
dbo.sedeMaestranze AS A
LEFT OUTER JOIN
dbo.sedeMaestranzeAnagrafica AS B
ON A.ID = B.IDCF
INNER JOIN
(
SELECT X.IDCF, X.DataInizio, X.DataFine, X.Livello, X.eccetera
FROM dbo.sedeMaestranzeAssunzioni AS X
WHERE (X.DataInizio = (SELECT MAX(Y.DataInizio) AS MaxDataIni FROM dbo.sedeMaestranzeAssunzioni AS Y WHERE (X.IDCF = Y.IDCF)))
) AS C
ON A.ID = C.IDCF
WHERE (A.CF = 'XYZWQT55A20R123A')
;
.