ActiveRecord offered interface abstraction, allowing the same interface to multiple databases.
While it abstracted some parts of SQL creation, programmers still had to write SQL fragments, which led to database specific SQL being used.