You might want to have a look at DistinctBy method in MoreLinq. Where you can pass a lambda expression as a parameter.
In your example it would look something similar to this:
var sourceId =
(from workstation in db.station
join letter in db.letter on workstation.id equals letter.Site_Id
where ThatDate < DateTime.Now.AddYears(-1)
select workstatio).DistinctBy(ws => ws.Id).ToList();
You can also use DistinctBy with multiple properties:
var sourceId =
(from workstation in db.station
join letter in db.letter on workstation.id equals letter.Site_Id
where ThatDate < DateTime.Now.AddYears(-1)
select workstatio).DistinctBy(ws => new {Id = ws.Id, OtherProperty = ws.OtherProperty}).ToList();
Btw, instead of reference-comparing, the equality of anonymous type instances is determined by comparing each one of their properties.
I have recently found an interesting discussion around this topic where Anders Hejlsberg himself suggests the solution to this problem. You can read it here.