Right.
Pre-defined schemas (in my experience, YMMV) just doesn't work in practice for deployment, because it captures the end state of tables, and not how to get there.
For very simple scenarios where we're just doing simple changes to tables, like adding a nullable field (or a required field with a default value), removing a field, etc. It's OK... A quick diff is good enough.
As soon as you have any kind of more complex scenarios that involves any kind of data migration, such as splitting a table into N, or adding fields where the value is going to be determined via some logic, etc., then we're talking migration scripts.