Какой из них будет более эффективным?
Как всегда: это зависит от того, что в таблицах и что индексируется.
Обычно и по умолчанию объединение предпочтительнее подзапроса. Он смотрит на каждого учителя, затем идет прямо к таблице курсов, чтобы найти соответствие для teacher_id. Надеюсь, вы создали индекс «Courses.teacher_id», и это будет простой поиск.
Но если вы этого не сделаете, подзапрос может быть быстрее. Если у вас много курсов, преподаваемых относительно небольшим количеством учителей, это может привести к сканированию таблицы один раз, чтобы создать небольшую временную таблицу, которую затем можно будет быстрее сравнить с каждой строкой таблицы преподавателей.
Но в этом случае, вероятно, было бы лучше просто добавить индекс.