А с кавычками выводит "ничего" т.е. ноль полей.
С какими именно?
user='40'
'user'='40'
"user"='40'
Это три абсолютно различных условия, выполняющих совершенно разные вещи.
user -
зарезервированное слово по требованию стандарта. По стандарту не уверен что обозначает в контексте where, надо искать (может как часть create user и подобных только зарезервирован), а в postgresql обозначает имя текущего пользователя. Имеет тип name, что и провоцирует ошибку.
Т.е. первое условие в принципе не имеет никакого отношения к каким-либо пользовательским таблицам.
'user' - просто текстовая константа. Никто не мешает в условии сравнивать одну константу с другой, where 1=1 в некоторых query builder отсюда же.
"user" - обращение к объекту, игнорируя зарезервированные слова. То есть если у вас в таблице proxy есть поле user - то запрос должен быть записан как
select * from proxy where "user"='40'
Но общая практика - лучше не надо использовать зарезервированные слова в качестве идентификаторов.