Usando NOT EXISTS
SELECT p.*
FROM TABLE_PRODUCT p
WHERE p.astatus = 'APAST'
AND NOT EXISTS (SELECT NULL
FROM TABLE_USER_OWNED_AUCTION uoa
WHERE uoa.specific_product_id = p.specific_product_id)
Usando LEFT JOIN/IS NULL
SELECT p.*
FROM TABLE_PRODUCT p
LEFT JOIN TABLE_USER_OWNED_AUCTION uoa ON uoa.specific_product_id = p.specific_product_id
WHERE p.astatus = 'APAST'
AND uoa.own_id IS NULL
Explicação
A consulta mais ideal pode ser determinada se as colunas comparadas entre as duas tabelas forem NULLable (IE:se os valores de
specific_product_id
em qualquer tabela pode ser NULL
). - Se nullable,
NOT IN
ouNOT EXISTS
é a melhor escolha no MySQL - Se NOT nullable, `LEFT JOIN/IS NULL é a melhor escolha no MySQL
Adendo
Depois que a consulta ideal for determinada, dê uma olhada em criando índices (possivelmente cobrindo índices) para pelo menos:
specific_product_id
TABLE_PRODUCT.astatus