Ans to Q1.
Table T1 should have all the columns that were mentioned in the embedded query, because that will always fail if you are trying to retrieve a column by name which doesn't exist. As per your question SELECT * will do, but then again the same needs an application software patch, which according to you should be avoided first hand.
Ans to Q2.
Outer join selects all records as per the criteria from table A and looks for a parellal record in table B. If table B doesn't hold that record (as per the joining condition), blanks are returned from table B.
In simple terms all records from table A will be fetched in the query though the same might not be present in table B