Чтобы запрос был эффективным, движок должен точно знать, какие столбцы должен возвращать запрос, потому что от него может сильно зависеть план запроса.
С такими структурами, как CASE, существуетопределенный уровень динамичности в запросе, но планировщик запросов может по-прежнему иметь представление о том, какие столбцы могут необходимо получить в том или ином случае до выполнения запроса .При действительно динамическом подходе, когда предполагается, что имя столбца извлекается из другого столбца, переменной или параметра запроса, было бы чрезвычайно трудно, если вообще возможно, разработать действительно эффективный план запроса.
Итак, вам действительно нужно сообщить планировщику запросов о необходимых данных во время компиляции запроса.Поэтому либо используйте CASE / встроенный IF / what-have-you, либо верните оба столбца и при необходимости выберите один из двух в вызывающем приложении.