JavaScript:
	
	SELECT T.TeamId,
    T.Name TeamName,
    ISNULL(x.MatchCount, 0) x.MatchCount
FROM Teams T
	LEFT JOIN
	(
		SELECT COUNT(*) MatchCount
		FROM Matches
		WHERE Matches.TeamId = T.TeamId
		GROUP BY Matches.TeamId
	) x  ON x.TeamId = T.TeamIdthis will result
 
	OUTER APPLY
allows us to use parent table fields (join table-evaluated functions with SQL Tables). more
		JavaScript:
	
	SELECT T.TeamId,
    T.Name TeamName,
    ISNULL(x.MatchCount, 0) x.MatchCount
FROM Teams T
	OUTER APPLY
	(
		SELECT COUNT(*) MatchCount
		FROM Matches
		WHERE Matches.TeamId = T.TeamId
		GROUP BY Matches.TeamId
	) xusing values from joins
		JavaScript:
	
	SELECT T.TeamId,
    T.Name TeamName,
    ISNULL(x.MatchCount, 0) x.MatchCount, 
    MyCounter.testCount
FROM Teams T
	OUTER APPLY
	(
		SELECT COUNT(*) MatchCount
		FROM Matches
		WHERE Matches.TeamId = T.TeamId
		GROUP BY Matches.TeamId
	) x
	OUTER APPLY
	(
		SELECT COUNT(*) ChampionCount
		FROM Champions
		WHERE Champions.TeamId = T.TeamId
		GROUP BY Champions.TeamId
	) y
	OUTER APPLY (
		SELECT 
		   CASE
			WHEN (ISNULL(ISNULL(x.MatchCount, 0) - ISNULL(y.ChampionCount, 0), 0)) < 0 THEN 0
			ELSE ISNULL(ISNULL(x.MatchCount, 0) - ISNULL(y.ChampionCount, 0), 0)
		   END AS testCount
	) MyCounterCROSS APPLY is equivalent to an INNER JOIN
OUTER APPLY is equivalent to a LEFT OUTER JOIN
