I'll admit I may be ignoring some of the details, but I think the essence of the question is how to avoid a cartesian product when left joining to multiple tables. From your description, it seems that you want your result to really be more like a union of results from several joins.
Here's an example that I think shows a pattern you could follow, however you would have to be CAREFUL TO CHECK PERFORMANCE characteristics of the join to the Combi union.
with
Trade(TradeId) as (
select 1
union
select 2
union
select 3
),
TC(TradeId, TradeComment) as (
select 1 , 'TC 1a'
union
select 1 , 'TC 1b'
union
select 1 , 'TC 1c'
union
select 2 , 'TC 2a'
),
TA(TradeId, TradeAuditAction) as (
select 1 , 'TA 1a'
union
select 1 , 'TA 1b'
),
Combi(TradeId, TradeComment, TradeAuditAction) as(
select TradeId, TradeComment , null
from TC
union all
select TradeId, null , TradeAuditAction
from TA
)
select Trade.TradeId, Combi.TradeComment, Combi.TradeAuditAction
from Trade
left join Combi on Combi.TradeId = Trade.TradeId
It's not clear whether you really want a row in the result set for a Trade that has no matching rows in the three tables, but my example above assumes that you do. The answer would actually be simpler if you do not want such a row.. something like ....
-- with Trade, TC, TA as above
select Trade.TradeId, TC.TradeComment, null as TradeAuditAction
from Trade
join TC on TC.TradeId = Trade.TradeId
union all
select Trade.TradeId, null, TA.TradeAuditAction
from Trade
join TA on TA.TradeId = Trade.TradeId