Are 'SELECT *' Sub-Queries inefficient? We have a third party analytics platform, which allows the end users to create their own tables and charts from a selection of pre-defined views. This queries a MS SQL Database. 

Unfortunately, it seems the SQL Syntax this software injects into the database to query the data, is massively inefficient, or so it appears, based on my knowledge and understanding.

For example, here is what a query could look like which joins two tables together:

SELECT tblOne.ColumnOne, tblOne.ColumnTwo, tblTwo.ColumnThree
FROM (SELECT * FROM tblOne) AS tblOne
JOIN (SELECT * FROM tblTwo) AS tblTwo ON tblOne.id = tblTwo.id


Now imagine these tables have many columns each, or there are many more joins to additional tables, each following the same pattern - am I correct in assuming this would perform a full table scan in the sub queries, effectively reading more than actually necessary? Am I also correct in assuming that the below would actually be more efficient? 

SELECT tblOne.ColumnOne, tblOne.ColumnTwo, tblTwo.ColumnThree
FROM tblOne
JOIN tblTwo ON tblOne.id = tblTwo.id


I just want a second opinion, before I write a strongly worded email to the developers of this analytics solution, just in case I am misunderstanding how the engine would handle a query like this.

Thanks in advance.
am I correct in assuming this would perform a full table scan in the sub queries, effectively reading more than actually necessary? 


No.  The query optimizer should see through this.  There's no general rule that subqueries are materialized in query execution.


  Am I also correct in assuming that the below would actually be more efficient? 


It may be that with enough joins and subqueries you could get a bad plan.  But it's not the first place to look.  Use the Query Store (SQL 2016+), or the plan cache DMVs, or XEvents to see the query plans and associated resource costs. 

For instance on AdventureWorksDW, these two queries use the same plan.

select p.Color, sum(f.SalesAmount) SalesAmount
from
 (select * from FactInternetSales) f
join
 (select * from DimProduct) p
 on p.ProductKey = f.ProductKey
 group by p.Color

 go

select p.Color, sum(f.SalesAmount) SalesAmount
from FactInternetSales f
join DimProduct p
 on p.ProductKey = f.ProductKey
group by p.Color