Como rodar SELECT FROM DUAL no SQL Server?

Uma dúvida comum de quem está migrando do Oracle para o SQL Server é querer saber qual tabela representa a “DUAL” do Oracle no SQL Server.

Nota: A tabela DUAL do Oracle é uma tabela também conhecida como “dummy”, ou seja, uma tabela bobinha, ou, em uma tradução livre do inglês, tabela estúpida, utilizada apenas para poder informá-la na cláusula FROM.

Resposta simples: Não existe a tabela DUAL e nem nenhuma tabela equivalente no SQL Server!

“Poxa, e agora?”

Calma! Na verdade você pode fazer um SELECT no SQL Server sem informar nada na cláusula FROM.
Vejamos um exemplo:

Para obter a data atual no Oracle:

SELECT SYSDATE FROM DUAL

Para obter a data atual no SQL Server:

SELECT GETDATE()

Agora se você está transferindo um programa desenvolvido em Oracle para o SQL Server e não deseja remover todas as referências à tabela DUAL, existe uma “solução alternativa” para isso!

Basta criar uma tabela chamada DUAL no SQL Server, conforme exemplo abaixo:

CREATE TABLE DUAL( DUAL varchar(1));

INSERT INTO DUAL (DUAL) VALUES (NULL);

Vamos rodar no SQL Server:

SELECT GETDATE() FROM DUAL;

Como a tabela DUAL possui apenas 1 registro, o retorno da função será apenas 1 também!

Aproveitando:

Para rodar SELECT FROM DUAL no Firebird, você pode usar a tabela RDB$DATABASE que sempre contém um único registro, ou efetuar a mesma “solução alternativa” adotada no SQL Server.

No Postgree o conceito é o mesmo do SQL Server, ou seja, você não precisa de uma tabela “dummy” para retornar as informações, conforme exemplo:
Para obter a data atual no Postgree:

select current_date

Qual é a sua opinião ou dúvida?