When you want to filter a collection with custom attribute value it works but when you want to retrieve the non-corresponding entries (like with the neq, null, not null, …. statements) it doesn’t work.
Default join on collection is an inner join so if you are doing that :
$myCollection()->addAttributeToFilter('my_attribute', array('null' => true));
.. you will find no entries
If you want to change the default inner join to a left join you just have to add ‘left’ as the third parameter of the addAttributeToFilter method :
$myCollection()->addAttributeToFilter('my_attribute', array('null' => true), 'left');
and now it works…
Here is the prototype of the corresponding method in Mage_Catalog_Model_Resource_Product_Collection :
public function addAttributeToFilter($attribute, $condition = null, $joinType = 'inner')
We can see that inner parameter is used by default