Uma função MySQL não pode retornar uma linha ou conjunto de linhas no MySQL. Apenas um procedimento armazenado pode retornar linhas. Isso é verdade até e incluindo o MySQL 5.4. Consulte as Limitações página. O uso de procedimentos armazenados como tabelas ou valores de cláusula where em consultas também não está disponível.
O melhor que você pode fazer se precisar usar uma função é usar GROUP_CONCAT para obter os valores em uma lista separada por vírgulas:
CREATE FUNCTION getuids() RETURNS VARCHAR(1024)
BEGIN
SELECT GROUP_CONCAT(uid SEPARATOR ',') INTO @uid_list FROM pages WHERE deleted = 0;
RETURN @uid_list;
END
Então, em sua instrução select que precisa verificar os uids, você pode usar a função FIND_IN_SET assim:
SELECT ... WHERE FIND_IN_SET(my_field, get_uids());
P.S. Eu havia postado originalmente links para as funções GROUP_CONCAT e FIND_IN_SET no site do MySQL, mas o Stack Overflow só me deixava usar um link. Oba por ser novo.