No SQL Server, considere uma tabela T com quatro linhas, nas quais os valores inteiros da coluna a são 1, 2, 4 e 6. O resultado produzido pela execução do comando select top 2 3*a x from T order by 1 exibe, exatamente, os valores:
- A)1 e 3;
Errada, porque 1 e 3 seriam valores ligados à coluna `a` e não ao resultado de `3*a` ordenado com `TOP`.
- B)3 e 6;
Certa, porque `3*a` gera 3, 6, 12 e 18; com `ORDER BY 1` e `TOP 2`, sobram exatamente 3 e 6.
- C)4 e 6;
Errada, porque 4 e 6 são valores da coluna `a`, não do cálculo `3*a`.
- D)6 e 12;
Errada, porque 6 e 12 seriam o segundo e o terceiro valores de `3*a`, não os dois primeiros.
- E)8 e 12.
Errada, porque 8 e 12 não aparecem no resultado de `3*a` para os valores dados em `a`.
Gabarito: B
Essa questão mistura duas ideias que caem muito em SQL: o uso de TOP para limitar linhas e o ORDER BY para definir quais linhas entram nesse recorte. No SQL Server, quando você escreve `select top 2 3*a x from T order by 1`, você está pedindo: calcule `3*a`, ordene pelo primeiro item da lista de seleção e depois traga só as 2 primeiras linhas. Aqui, como a coluna `a` vale 1, 2, 4 e 6, a expressão `3*a` gera 3, 6, 12 e 18. Ordenando em ordem crescente, ficam 3, 6, 12 e 18. Como o `TOP 2` pega apenas as duas primeiras após a ordenação, o resultado mostra 3 e 6. Repare que o `order by 1` não é a linha 1 da tabela, nem a coluna `a`: ele se refere ao primeiro item do `select`, isto é, `3*a`. Essa é uma pegadinha clássica de prova, especialmente em bancas como a FGV, que adoram testar se você confunde a posição no select com posição na tabela. Em resumo: calculou a expressão, ordenou pelo resultado da expressão e limitou a duas linhas. Por isso o gabarito B está correto.