Разница между этими ошибками - во времени их обнаружения. Ошибки компиляции, что очевидно из названия, обнаруживаются во время компиляции. Ошибки выполнения можно обнаружить при запуске программы, если повезёт, и на тестовых данных выполнится ветка кода, содержащая ошибку.