Questo accade perchè sicuramente verranno sollevate delle eccezioni in quel codice. Io mi aspettavo che tutti i record della tabella A avessero un corrispondente nella tabella B... se così non è, non puoi semplicemente far finta di nulla, ma devi preoccuparti che non vi siano campi nulli.
Non hai mostrato i campi che hai selezionato nella SELECT, quindi io presumo che sia una cosa di questo tipo:


codice:
SELECT b.id, b.id_tabella_A, b.campo2, ...
FROM TabellaA a LEFT JOIN TabellaB b ON( ... )
Se così fosse, la query restituisce il seguente recordset:

codice:
1 - 1 - Viola
NULL - NULL - NULL
2 - 3 - ROSSO

Al momento di andare a reperire i valori dei campi, viene sollevata un'eccezione (il valore NULL non può essere convertito in un intero) ed il comportamento in questo caso è implementation-defined (vedi documentazione del metodo getInt() di Cursor nella JavaDoc di Android), quindi può succedere di tutto.

Dovrei, comunque, vedere ESATTAMENTE cosa hai messo nella clausola SELECT della query. Se la master table è TabellaA, allora il suo ID recuperalo da TabellaA e non da TabellaB... almeno avrai un valore non nullo su cui poterti appoggiare per le valutazioni successive.


Ciao.