Большинство каркасов ORM будут обрабатывать второй случай с эквивалентной производительностью первого случая. Взяв Hibernate в качестве эталонного примера, они недвусмысленно скажут вам, что вы никогда не сделаете первый вариант. Вообще-то, они как-то раздражены.
На самом деле, я считаю, что первый вариант технически не будет рассматриваться как ORM, поскольку отношения обрабатываются на уровне идентификатора в вашем коде ООП.
Hibernate (как и большинство других) загружается медленно, а это значит, что вы можете загрузить своего сотрудника, и он не будет загружать отдел. Но затем, если вы скажете employee.getDepartment (), в этот момент он сделает простой оператор выбора, чтобы получить данные отдела.
Это также может быть настроено либо во время отображения, либо во время запроса, поэтому, если у вас есть несколько случаев использования, когда вы знаете, что вам понадобится Отдел, вы можете сохранить второй вызов SQL, сказав, что нужно выбрать и Сотрудника, и Отдел в одном запрос на присоединение.
Ознакомьтесь с "Маленьким учебником по стратегии извлечения" в Hibernate * для получения дополнительной информации.