Como dice el mensaje de error, argumentos para WHERE
no debe devolver un conjunto. jsonb_array_elements
devuelve un conjunto y no se puede comparar con un solo valor. En la segunda consulta, tiene una combinación cruzada dentro de la selección y eso la convierte en un resultado adecuado para usar WHERE
activado.
También puedes hacerlo de esta manera
SELECT mydata.pk FROM mydata
WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');
Aquí la subselección le permitirá usar el IN
operador para encontrar el valor deseado ya que el resultado ya no es un conjunto.
Otra forma es consultar el jsonb directamente
SELECT mydata.pk FROM mydata
WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;
De esta manera, no necesita convertir jsonb en un conjunto de resultados y buscar dentro de él.