Prova questa:
SELECT TOP 3 F.idfoto, Q.*
FROM (foto AS F
INNER JOIN (
SELECT idImmobile, MIN(file) AS MinFile
FROM foto
GROUP BY idImmobile
) AS Q
ON F.file = Q.MinFile
AND F.idImmobile = Q.idImmobile)
INNER JOIN immobile AS I
ON F.idImmobile = I.idImmobile
WHERE I.contratto = 'Affitto'
AND I.tipologia = 'Villa'
AND I.prezzo BETWEEN 0 AND 1000
ORDER BY Q.idImmobile DESC;
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org