• One can delete 9 rows non-deterministically with this code:

    DELETE TOP (9) @t

    Though in practice you're likely to see the same 9 rows deleted, it's just not guaranteed. To go further and delete 9 rows at random reliably:

    DELETE ToDelete

    FROM

    (

    SELECT TOP (9) *

    FROM @t AS t

    ORDER BY

    NEWID()

    ) AS ToDelete;

    Now I know that wasn't really the point of the question, but I wanted to get it out of the way.

    The broader question is whether the optimizer should be free to reorder expressions and, in particular, to evaluate those expressions more than once, even when that expression is non-deterministic. On balance, I think I prefer better query plans for a broad class of queries over the alternative.