Както се казва в съобщението за грешка, аргументи за WHERE не трябва да връща комплект. jsonb_array_elements връща набор и не може да се сравни с една стойност. Във втората заявка имате кръстосано свързване вътре в избраното и това го преобразува в подходящ резултат за използване на WHERE на.
Можете да го направите и по този начин
SELECT mydata.pk FROM mydata
WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');
Тук подизборът ще ви позволи да използвате IN оператор за намиране на желаната стойност, тъй като резултатът вече не е набор.
Друг начин е да направите заявка директно към jsonb
SELECT mydata.pk FROM mydata
WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;
По този начин не е необходимо да конвертирате jsonb в набор от резултати и да търсите в него.