De fato, existem vários sistemas que unificam o banco de dados e a linguagem de programação em um único ambiente.
Smalltalk é provavelmente o mais próximo do que você descreve. Os objetos na memória são mantidos em uma "imagem", para que o ambiente de idioma possa ser usado como um banco de dados (objeto) imediatamente. E a linguagem mais moderna possui algum tipo de mecanismo de persistência interno, o que significa que objetos no ambiente de linguagem podem ser persistidos e consultados usando a própria linguagem.
Isto é muito conveniente para aplicações de usuário único. Mas a abordagem não será dimensionada para vários usuários, pois eles precisarão compartilhar o mesmo espaço de memória, o que obviamente limita a quantidade de usuários. A solução escalável requer um servidor de banco de dados separado que administra a simultaneidade. Mesmo assim, existem vários NoSQL-bases de dados que se integra com um ambiente de linguagem específica e permite que você persistir e consultar objetos no próprio idioma.
Do lado relacional, temos linguagens como o T-SQL, que é uma linguagem de programação completa que é um superconjunto do SQL; portanto, a consulta e o DML podem ser misturados com lógica processual complexa arbitrária. Aplicativos de negócios complexos foram criados usando o T-SQL, o que certamente é possível, mas a tendência atual é afastar a lógica de negócios do banco de dados.
Nesses casos, é realmente muito elegante e conveniente ter o banco de dados integrado à linguagem de programação e evitar a "incompatibilidade de impedância". Então, por que as pessoas ainda usam bancos de dados relacionais separadas do ambiente de programação e tentar colmatar com algum ORM-kludge?
Acontece que há várias vantagens em separar dados e consultas de qualquer linguagem e ambiente de programação específicos.
- Independência de dados. Na maioria das organizações, os dados são realmente acessados por vários aplicativos. Uma loja pode ter um banco de dados usado pelo front-end da web, por uma ferramenta de suporte ao cliente, um mecanismo de relatório e assim por diante. Os dados em si costumam ter vida longa, enquanto os aplicativos vêm e vão. O acoplamento dos dados a um ambiente de programação específico seria bloqueado em um ambiente de programação específico. Mas as linguagens de programação vêm e vão, enquanto os dados são eternos.
- Consulta ad hoc. É extremamente conveniente poder abrir um prompt de banco de dados e escrever uma consulta. Se a consulta estivesse fortemente acoplada ao ambiente de programação, isso seria uma tarefa de programação e somente os desenvolvedores seriam capazes de fazê-lo.
- Evite ficar preso. Como o SQL é um padrão, vários fornecedores podem fornecer sistemas de gerenciamento de banco de dados que são mais ou menos intercambiáveis. Isso evita o bloqueio do fornecedor e facilita a comparação de produtos.
- Acoplamento solto. Ter uma interface bem definida entre a camada de aplicativo e o banco de dados torna possível ajustar e otimizar o banco de dados independentemente da lógica do aplicativo.
- Interface compartilhada. Como a interface do banco de dados é independente da lógica do aplicativo, as ferramentas disponíveis no mercado podem ser usadas para criação de perfil, replicação, análise e assim por diante.