I'm not quite sure what you do expect in cases 2, 3, and 4. Checking "Assume Referential Integrity" tells Tableau that all your joins are from a foreign key in the left hand table to a primary key in the right hand table. Tableau can use that information to usually remove (cull) the right hand table from the join. It rarely can do the same with the left hand table.
So I guess what happened to me is like the way tableau works,
If I am taking from any right table (as in picture level 2/3/4), it will always do joins with the 1st left ones0level 1 in picture (till the 1st left).
Is there a way to treat all tables separately?
Means – no matter from where I am taking fields to the report – tableau will generate only SQL for the fields I dragged.
Yogev - There isn't a way to treat all tables separately. You may need to use different connections for different levels of detail. Or you may be able to use level of detail calculations and right joins to get the results you want.