I had the same problem. I solved it by creating a new query with the same column order as the columns in the source table.
Miss-mapped columns in SSIS
I have a simple ETL that is selecting columns from tables in one SQL Server database and inserting them into a table in another SQL Server db. The ODBC Source uses a SQL Query. The ODBC Destination is loading directly to the table. All is working perfectly, no error messages, except that the data is being inserted into the wrong columns in two cases.
The select: SELECT SerialNumber, IPAddress... loads the serial number into the IPAddress field in the destination and the IPAddress into the SerialNumber field.
The mapping tab is correct, as far as mapping SN to SN and IP to IP, but there is something odd about it. The destination table columns are not shown in the order they should be, i.e. the table's first column is SN and the second is IP, but the ODBC Destination mapping tab shows IP first and SN second. So when I map SN to SN I suspect that what I'm actually doing is mapping SN from the query to the second column of the table, which is actually IP (and vice versa). The columns are different length varchars, so I can switch the mapping and it'll work, but it will warn me that the data may not fit in the column due to the size difference. It would also be damn confusing for anyone trying to troubleshoot my code at some future date.
Any thoughts?
ENV:
Visual Studio 2019
SQL Server 2016