The default behavior of Completable.subscribe() for errors is different from that of Observable or Single. Errors in Completable are just passed to RxJavaErrorHandler which does nothing by default. While Observable and Single cause runtime OnErrorNotImplementedException which is expected.
Completable.java
@Override
public void onError(Throwable e) {
ERROR_HANDLER.handleError(e);
}
Observable.java
@Override
public final void onError(Throwable e) {
throw new OnErrorNotImplementedException(e);
}