Question: Is there any reason why or why not you should do an 'order by' in a subquery?

Answer: 
You should use it if the subquery uses some kind of `LIMIT` / `TOP`.

`SQL Server` will not allow it unless the subquery contains `TOP` or `FOR XML` clause as well:

```
-- Fails
WITH    q(id) AS
        (
        SELECT  1
        UNION ALL
        SELECT  2
        )
SELECT  *
FROM    (
        SELECT  *
        FROM    q
        ORDER BY
                id DESC
        ) q2

-- Succeeds
WITH    q(id) AS
        (
        SELECT  1
        UNION ALL
        SELECT  2
        )
SELECT  *
FROM    (
        SELECT  TOP 1 *
        FROM    q
        ORDER BY
                id DESC
        ) q2

-- Succeeds, but ORDER BY is ignored
WITH    q(id) AS
        (
        SELECT  1
        UNION ALL
        SELECT  2
        )
SELECT  *
FROM    (
        SELECT  TOP 100 PERCENT *
        FROM    q
        ORDER BY
                id DESC
        ) q2

```
Smarter people say that is not proper/valid way to do it.
In my case SELECT TOP 100 PERCENT in sub-query solved the problem.

Cheers