Если я правильно понял вопрос (а это непросто), то потому что язык SQL - нечувствителен к регистру, т.е. следующие запросы эквивалентны:
select * from Groups;
select * from groups;
select * from GROUPS;
SELECT * FROM groups;
SeLeCt * FrOm GrOuPs;
Если вы берете название таблицы/колонки (или иного объекта БД) в кавычки, он становится (по крайней мере, согласно SQL стандарту) case-sensitive, т.е. "group"/"Groups"/"gRoUps" - будут разными идентификаторами (например, все три такие таблицы могут существовать в БД одновременно).
Если кавычек нет, идентификаторы по стандарту сравниваются после приведения к upper-case. В Postgres это немного не так: там идентификаторы без кавычек приводятся к lower-case.
Т.е. другими словами, запрос
create table Groups ... создаст в Postgres таблицу с именем
groups. Запрос
select * from GrOupS; будет также искать таблицу с именем
groups.
При использовании кавычек запрос
create table "Groups" ... создаст таблицу с именем
Groups. Запрос
select * from "GrOupS"; будет также искать таблицу с именем
GrOupS.
spoilerРечь выше только про Postgresql. Другие СУБД могут вести (и ведут) себя по-другому. Так, в
mysql поведение идентификаторов зависит от ОС (точнее, от того, case sensitive/insensitive ее файловая система) и от конфигурации БД.
Обычно это не вызывает проблем, пока вы не начинаете использовать закавыченные и незакавыченные идентификаторы одновременно. Например, что скорее всего имеет место в вашем случае, таблица создается запросом
create table Groups ...
-- реальное имя таблицы - groups
Когда же вы делаете запрос
select * from "Groups", обращение идет к несуществующей таблице
Groups.
В общем, разберитесь, какое название у таблицы в БД (в psql команда
\dt, или смотрите свойства таблицы в своей среде). Если оно не lower-case, используйте кавычки с точным названием (например,
select * from "GROUPS"), в противном случае лучше обходиться вообще без кавычек.