Which join to use ? and how to add rank column on the result
With out some sample code to go on I created my own set 

I had to join on both ID and Name for the rank in order to prevent cross joins

create table #Table4 (ID int, Names nvarchar(25), Moneys Money)
create table #Table5 (ID int, Place nvarchar(25))

insert into #Table4(ID,Names,Moneys)values(1,'waffles',1000), 
   (2,'Pancakes',2000),(3,'Blueberries',3000),(3,'Eggs',4000),(3,'Toast',5000)
insert into #table5(ID,Place)values(1,'House'),(2,'Kitchen')

select x.Rn, t4.ID,t5.Place,t4.Names,t4.Moneys
from #Table4 t4
left join #table5 t5
    on t4.ID = t5.ID
inner join (select t4a.ID, t4a.Names, rank() over(partition by t4a.ID order 
     by t4a.Moneys desc) as Rn from #Table4 t4a) x
    on t4.ID = x.ID 
    and t4.Names = x.Names
order by ID,RN


Results will look something like this 

Rn  ID  Place   Names       Moneys 
1   1   House   waffles     1000.00
1   2   Kitchen Pancakes    2000.00
1   3   NULL    Toast       5000.00
2   3   NULL    Eggs        4000.00
3   3   NULL    Blueberries 3000.00