Come dice il messaggio di errore, argomenti per WHERE
non deve restituire un set. jsonb_array_elements
restituisce un set e non può essere confrontato con un singolo valore. Nella seconda query hai un cross join all'interno di select e questo lo converte in un risultato adatto per usare WHERE
acceso.
Puoi farlo anche in questo modo
SELECT mydata.pk FROM mydata
WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');
Qui la sottoselezione ti consentirà di utilizzare il IN
per trovare il valore desiderato poiché il risultato non è più un insieme.
Un altro modo è interrogare direttamente jsonb
SELECT mydata.pk FROM mydata
WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;
In questo modo non è necessario convertire jsonb in un set di risultati e cercare al suo interno.