Sebenarnya masuk akal nih alasannya:
Dalam sebuah tabel, Anda sebenarnya dapat mengatur kolom apa pun sebagai kunci utamanya. Jadi bisa berupa integer, double, string, dll. Meskipun saat ini, kebanyakan kita menggunakan integer atau, belakangan ini, string sebagai kunci utama dalam sebuah tabel.
Karena kunci asing menunjuk ke kunci utama tabel lain, inilah mengapa Anda perlu menentukan tipe data kunci asing. Dan itu jelas membutuhkan tipe data yang sama.
EDIT:
Implementasi SQL lemah dalam kasus ini seperti yang dapat kita lihat:mereka mengizinkan tipe yang kompatibel (INT dan BIG INT, Float atau DECIMAL dan GANDA) tetapi dengan risiko Anda sendiri . Seperti yang dapat kita lihat dalam contoh Anda, di bawah ini.
Namun, norma SQL menentukan bahwa kedua tipe data harus sama. Jika tipe data adalah karakter, mereka harus memiliki panjang yang sama, jika tidak, jika bilangan bulat, mereka harus memiliki ukuran yang sama dan harus keduanya ditandatangani atau keduanya tidak ditandatangani .
Anda dapat melihat sendiri di sini, sebuah bab dari buku MySQL yang diterbitkan pada tahun 2003.
Semoga ini menjawab pertanyaan Anda.