И B, и C используют одно и то же строковое значение, поскольку все строки по сути "кэшируются" JVM. Они существуют в памяти столько, сколько им нужно.
Использование B или C зависит от читабельности кода (и удобства сопровождения). Подход B дает преимущество в том, что строка запроса SQL непосредственно примыкает к коду, использующему его результаты, поэтому не должно быть никаких сомнений относительно того, что запрос находится в точке его использования.
Подход C предпочтителен, если вы используете одну и ту же строку SQL-запроса во многих местах, что позволяет вам определить строку один раз для всего класса (или даже пакета). Если вам когда-либо придется менять его везде, где он используется, вам нужно всего лишь изменить это определение.